如果我有两个文件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 class2class1_file.py中,以使class1 dummy中的方法起作用?我有点困惑,因为我来自强类型语言,它需要导入类并将它们传递给使用的方法。但是对于python来说,参数似乎可以是任何类型,并且可以在编译时解析。如果不需要,class1中的方法如何知道dummy函数class1的内容?

最佳答案

如果您打算将class2的对象传递给class1dummy,则要创建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方法,该行将被正确评估。

关于python - Python将类对象传递给另一个类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21871595/

10-11 08:05