Java 使用类对象作为python中其他类函数的参数
我的程序有以下结构- File1.pyJava 使用类对象作为python中其他类函数的参数,java,python,oop,design-patterns,Java,Python,Oop,Design Patterns,我的程序有以下结构- File1.py class A: index1 def method1(): // --do stuff-- File2.py import File1 Class B: index2 def method2(a) // Needs Object of A as a parameter // --do stuff-- a.method1() // How can I guarantee that t
class A:
index1
def method1():
// --do stuff--
File2.py
import File1
Class B:
index2
def method2(a) // Needs Object of A as a parameter
// --do stuff--
a.method1() // How can I guarantee that this is an object of class A
File3.py
import File1
import File2
Class Starter:
def start():
a = A()
b = B()
b.method2(a)
我有几个问题-
isinstance
内置项来验证其类型。然而,pythonic的方法只是简单地假设只要它公开类B想要调用的方法,任何对象都是令人满意的。这就是@johnny所说的“鸭子打字”的意思
(2) 这通常是IDE,但在交互式解释器中,可以调用对象上的dir()
或vars()
,以检查其属性
(3) 这是品味的问题。Java让您确信对象的行为将完全符合预期,而代价是声明类型、接口、检查的异常等。Python对行为是否完全符合预期的信心较低,但您无需花费太多时间提前构建类型层次结构。(1)如果method2的参数确实必须是类A的实例,那么可以使用isinstance
内置项来验证其类型。然而,pythonic的方法只是简单地假设只要它公开类B想要调用的方法,任何对象都是令人满意的。这就是@johnny所说的“鸭子打字”的意思
(2) 这通常是IDE,但在交互式解释器中,可以调用对象上的dir()
或vars()
,以检查其属性
(3) 这是品味的问题。Java可以让您确信对象的行为完全符合预期,而不必声明类型、接口、已检查的异常等。Python对行为是否符合预期的信心较低,但您无需花费太多时间提前构建类型层次结构。您可以这样检查类型:
import File1
Class B:
index2
def method2(a) // Needs Object of A as a parameter
// --do stuff--
// How can I guarantee that this is an object of
if type(a) == A:
a.method1()
您可以这样检查类型:
import File1
Class B:
index2
def method2(a) // Needs Object of A as a parameter
// --do stuff--
// How can I guarantee that this is an object of
if type(a) == A:
a.method1()
要确保参数在使用该参数执行任何任务之前属于给定类,可以在执行所需任务之前先使用内置的“type()”函数对其进行验证。要确保参数在使用该参数执行任何任务之前属于给定类,可以使用内置的“type()'函数在执行所需任务之前先验证它。这不是Duck类型的本质吗?这不是Duck类型的本质吗?