1

可能的重复:
Python 中的“Least Astonishment”:可变默认参数

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

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?

如果您能帮助我,我将不胜感激。

问候,导航

4

1 回答 1

3

__init__set() 在解析父类的时候创建一次。

要修复它,请像这样更改代码:

class MyBase:

    def __init__(self, store=None):
        if store is None:
            store = set()
        self._store = store
于 2012-09-06T06:59:52.523 回答