如何将引用从一个对象内部传递给另一个对象的构造函数

时间:2016-05-30 15:25:31

标签: python constructor

假设我在一个对象(object1)中,我想将它的引用传递给我在其中创建的另一个对象(object2)。

内部对象1:

# ...
self.object2Reference = object2(self)
# ...

对象代码2:

class object2:
    def __init__(self, object1Reference)
        self.object1Reference = object1Reference
# ...

失败并出现以下错误:

self.object2 = object2() 
TypeError: __init__() takes exactly 2 arguments (1 given)

我希望能够从object2内部访问object1的变量和方法。

编辑: self.object2Reference = object2(self)发生在通过新线程启动的方法中,因此self不是我此时所期望的。我试图让这个例子尽可能小而简单,但忘了一个导入的方面这样做。我的错。但答案是好的和完整的,并且还显示了继承的使用。

1 个答案:

答案 0 :(得分:3)

要将当前对象传递给另一个声明要使用的对象。

代码:

class Object2:
    def __init__(self, object1):
        self.object1 = object1
        self.object1.print_something()


class Object1:
    def __init__(self):
        self.object2 = Object2(self)

    def print_something(self):
        print("I am an object1")

x = Object1()

似乎是你想要做的。这对我有用,并打印出“我是对象1”。如果您使用两个对象构建上面的代码,它应该按照您的希望工作。

编辑:

如果您希望继承而不是仅仅使用对象

我还想补充一点,如果你正在寻找继承而不是只能访问object1,你可以这样做:

class Object1:
    def print_something(self):
        print("I am an object1 method inherited by object 2")

class Object2(Object1):
    def __init__(self):
        super().__init__()
        self.print_something()


x = Object2()

有了这个,Object2将继承它没有实现的任何Object1方法。 super().__init__()和put(Object1)在类声明中是你在这里做的唯一两个变化,然后能够使用self中的任何Object1方法。