如果我有两个文件class1_file.py
和class2_file.py
,并且每个文件都有class1
和class2
类。
class1_file.py
class class1:
def dummy(self, class2):
class2.dummy()
class2_file.py:
class class2
def dummy(self):
print 'hey'
我是否需要在from class2_file import class2
中加入class1_file.py
,以使class1 dummy
中的方法有效?我有点困惑,因为我来自强类型语言,它需要导入类并将它们传递给方法以供使用。但对于python,似乎参数可以是任何类型,它将在编译时解析它。如果不是必需的话,class1
中的方法如何知道dummy
函数class1
的内容是什么?
答案 0 :(得分:1)
不,你不必,因为在签名def dummy(self, class2):
class2 只是方法dummy
中的局部变量。只要def dummy(self, foo):
是方法foo
的对象,它也可以是dummy
。请参阅Duck typing in Python。
答案 1 :(得分:1)
不要将变量命名为class2。是的,您需要从类2_file导入类。
from class2_file import class2
class class1:
def dummy(self, class2_obj):
class2_obj.dummy()
答案 2 :(得分:1)
如果您打算将class2
的对象传递给class1
的{{1}},那么要创建dummy
的对象,您需要导入class2。
class2
除此之外,from class2_file import class2
class class1:
def dummy(self, obj): # To avoid confusion changed the variable name
obj.dummy()
class1().dummy(class2()) # import is needed for `class2()` part only
只是一个变量名,可以是任何名称。这就是我在这个答案中将其更改为class2
的原因。
执行obj
时,Python将在所有有效范围内查找class2()
的定义,但不会找到它。但是当你做的时候
class2
您在此模块中引入from class2_file import class2
作为本地名称。因此,Python将能够识别它。
class2
当您创建这样的函数时,Python将尝试执行 def dummy(self, class2):
class2.dummy()
并将class2.dummy()
作为参数,而不是作为类,因为class2
是范围中最接近的名称。只要class2
传递的值具有class2
方法,就会正确评估该行。