I found a strange problem with subclassing and updating the dictionary in new-style classes:
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}
>>>
In debugging in the second call ( c(3)), you can see that the aconstructor is self.propsalready equal inside {'arg': 2}, and after that the constructor is called after it b, it becomes {'arg': 3}for both objects!
also the order of the constructor calls:
a, b
c, a, b
If you change self.props.update()to self.props = {'arg': val}in the constructor b, everything will be fine and will act as expected
But I really need to update this property, not replace
source
share