某些python类继承会产生一些意想不到的后果,即" sticky"我希望重置的属性。
一个简化的场景,仍然展示了发生了什么:
class Foo(object):
def __init__(self, headers={}):
self.headers = headers
class Bar(Foo):
def __init__(self, headers={}):
super().__init__(headers=headers)
```
如果我实例化Bar
的实例,我可以看到.headers
为空。然后编辑bar.headers
,看看它们已被修改。但是然后实例化Bar
的另一个实例,并且意外地.headers
仍然被修改:
In [39]: bar = Bar()
In [40]: bar.headers
Out[40]: {}
In [41]: bar.headers['baz'] = True
In [44]: goober = Bar()
In [45]: goober.headers
Out[45]: {'baz': True}
这种继承有更好的模式吗?否则,其他一切都能正常运行并且符合预期。