Python将类对象传递给另一个类
如果我有两个文件Python将类对象传递给另一个类,python,oop,Python,Oop,如果我有两个文件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' 我是否需要将:从class2_文件导入class2到class1_文件.
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'
我是否需要将:
从class2_文件导入class2
到class1_文件.py
中,以便class1dummy
中的方法工作?我有点困惑,因为我来自强类型语言,它需要导入类并将它们传递到方法中以供使用。但是对于python来说,这个参数似乎可以是任何类型的,它将在编译时解析它。如果它不是必需的,那么class1
中的方法如何知道class1
的dummy
函数中会出现什么?不必,因为在签名中定义dummy(self,class2):
class2只是方法dummy
中的局部变量。它也可以是def dummy(self,foo):
只要foo
是方法为dummy
的对象。请参阅。不要将变量命名为class2。是的,您需要从class2_文件导入class2
from class2_file import class2
class class1:
def dummy(self, class2_obj):
class2_obj.dummy()
如果您打算将
class2
的对象传递给class1
的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
当您执行class2()
Python将在所有有效范围内查找class2
的定义,但不会找到它。但当你这么做的时候
from class2_file import class2
您在本模块中将class2
作为本地名称引入。因此,Python将能够识别它
def dummy(self, class2):
class2.dummy()
当您创建这样一个函数时,Python将尝试执行
class2.dummy()
,它将class2
作为参数,而不是类,因为class2
是范围中最接近的名称。只要为class2
传递的值具有dummy
方法,该行将被正确计算。这仅在foo具有“dummy”方法的情况下有效,对吗?谢谢。但这是否意味着@zhangxaochen的答案是错误的?@user1234440他的答案也是正确的。检查我答案的最后一行。他只是想说明那一点。