Методы Python: значения параметров по умолчанию оцениваются ОДИН РАЗ

мы обнаружили странную проблему с подклассами и обновлениями словаря в классах нового стиля:

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 конструктор, все будет хорошо, и будет действовать как положено

Но мне действительно нужноОбновить это свойство, а не заменить

Ответы на вопрос(3)

Ваш ответ на вопрос