如何在Python中创建类的不同实例?

mar*_*v81 9 python oop class instance

有人可以向我解释下面的代码.

class InnerTest:

    def __init__(self, value = 0):
        self.value = value

class OuterTest:

    def __init__(self, inner_test = InnerTest()):
        self.inner_test = inner_test

a = OuterTest()
b = OuterTest()

a.inner_test.value = 42
print b.inner_test.value
Run Code Online (Sandbox Code Playgroud)

它打印42,我预计0.

我打算创建两个OuterTest实例,每个实例都包含一个不同的InnerTest实例.相反,我得到了两个引用同一个InnerTest实例的OuterTest实例.

还有什么是正确的方法来实现我想要的东西?

Roh*_*ain 10

函数中的默认参数仅在函数定义时计算一次.因此,只有一个实例InnerTest用于该对象.

这意味着,当您创建两个对象时:

a = OuterTest()
b = OuterTest()
Run Code Online (Sandbox Code Playgroud)

两者,a.inner_test并且b.inner_test,都指的是同一个实例,因此结果.

要解决此问题,请将默认值更改为None,并有条件地创建实例:

class OuterTest:
    def __init__(self, inner_test=None):
        if not inner_test:
            inner_test = InnerTest()
        self.inner_test = inner_test
Run Code Online (Sandbox Code Playgroud)