我發現,在新的樣式類的子類和字典更新一個奇怪的問題: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)
如果你在b
構造改變self.props.update()
與self.props = {'arg': val}
,一切都會好起來,並如預期
但我真的需要將採取行動到更新這個屬性,不能代替
這是繼承問題,還是「默認參數值被評估爲一次」問題? – 2009-09-02 14:04:46
謝謝,用'None'代替'{}'幫助了我。 – 2009-09-02 14:10:26
謝謝,漢克,我已經重新命名了這個問題 – 2009-09-02 14:11:37