我发现新式类中的子类化和字典更新有一个奇怪的问题:
Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on
win32
>>> class a(object):
... def __init__(self, props={}):
... self.props = props
...
>>> class b(a):
... def __init__(self, val = None):
... super(b, self).__init__()
... self.props.update({'arg': val})
...
>>> class c(b):
... def __init__(self, val):
... super(c, self).__init__(val)
...
>>> b_inst = b(2)
>>> b_inst.props
{'arg': 2}
>>> c_inst = c(3)
>>> c_inst.props
{'arg': 3}
>>> b_inst.props
{'arg': 3}
>>>
在调试中,在第二次调用(c(3)
)中,您可以看到在a
构造函数self.props
内已经等于{'arg': 2}
,并且当b
之后调用构造函数时,它变成{'arg': 3}
了两个对象!
此外,构造函数调用的顺序是:
a, b # for b(2)
c, a, b # for c(3)
如果您在构造函数中替换self.props.update()
为,一切都会好起来的,并且会按预期运行self.props = {'arg': val}
b
但我真的需要更新这个属性,而不是替换它。