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)