父__init__类变量在所有子实例之间共享

时间:2012-09-06 06:36:30

标签: python

  

可能重复:
  “Least Astonishment” in Python: The Mutable Default Argument

我对以下内容感到困惑。我有一个基类:

class MyBase:

    def __init__(self, store=set()):
        self._store = store

现在子类继承了MyBase

class Child1(MyBase):
    pass

class Child2(MyBase)
    pass

然后,

child1 = Child1()
child2 = Child2()

print(id(child1._store) = id(child2._store))
>>> True

为什么这些实例具有共享_store ??

如果你能帮助我,我真的很感激。

此致 NAV

1 个答案:

答案 0 :(得分:3)

set()在解析父类的__init__时创建一次。

要解决此问题,请更改以下代码:

class MyBase:

    def __init__(self, store=None):
        if store is None:
            store = set()
        self._store = store