有人可以向我解释下面的代码.
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
它打印42,我预计0.
我打算创建两个OuterTest实例,每个实例都包含一个不同的InnerTest实例.相反,我得到了两个引用同一个InnerTest实例的OuterTest实例.
还有什么是正确的方法来实现我想要的东西?
函数中的默认参数仅在函数定义时计算一次.因此,只有一个实例InnerTest
用于该对象.
这意味着,当您创建两个对象时:
a = OuterTest() b = OuterTest()
两者,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