Python将类对象传递到另一个类

时间:2014-02-19 05:10:12

标签: python oop

如果我有两个文件class1_file.pyclass2_file.py,并且每个文件都有class1class2类。

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的内容是什么?

3 个答案:

答案 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方法,就会正确评估该行。