How to create distinct instances of a class in Python?
本问题已经有最佳答案,请猛点这里访问。
有人能给我解释一下下面的代码吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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实例,每个outertest都包含一个不同的innertest实例。相反,我得到了两个outertest实例,它们引用了同一个innertest实例。
还有什么是实现我想要的东西的正确方法?
函数定义时,函数中的默认参数只计算一次。因此,两个对象都只使用了一个
这意味着,当您创建这两个对象时:
1 2 | a = OuterTest() b = OuterTest() |
要解决此问题,请将默认值更改为
1 2 3 4 5 | class OuterTest: def __init__(self, inner_test=None): if not inner_test: inner_test = InnerTest() self.inner_test = inner_test |
您可以将
使用
1 2 3 | class OuterTest: def __init__(self): self.inner_test = InnerTest() |
或:
1 2 3 | class OuterTest: def __init__(self, inner_test = InnerTest): self.inner_test = inner_test() |
这两种方法都将按需要工作,传递对类的引用意味着您可以选择传递您想要的任何类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | In [11]: class OuterTest: ....: def __init__(self, inner_test=InnerTest): ....: self.inner_test = inner_test() ....: In [12]: a = OuterTest() In [13]: b = OuterTest() In [14]: a.inner_test.value = 42 In [15]: print(a.inner_test.value) 42 In [16]: print(b.inner_test.value) 0 In [17]: class OuterTest: ....: def __init__(self): ....: self.inner_test = InnerTest() ....: In [18]: a = OuterTest() In [19]: b = OuterTest() In [20]: a.inner_test.value = 42 In [21]: print(a.inner_test.value) 42 In [22]: print(b.inner_test.value) |