मूल्यांकन किया जाता है मैं न्यू-शैली वर्ग में उपवर्गीकरण और शब्दकोश अद्यतन के साथ एक अजीब समस्या मिली है:अजगर तरीके: डिफ़ॉल्ट पैरामीटर मान एक बार
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 = {'arg': val}
साथ self.props.update()
बदल देंगे, तो सब कुछ ठीक हो जाएगा, और उम्मीद
के रूप में लेकिन मैं वास्तव में जरूरत है कार्य करेगा अद्यतन करें
क्या यह एक विरासत समस्या है, या "डिफ़ॉल्ट पैरामीटर मानों का मूल्यांकन एक बार" किया जाता है? –
धन्यवाद, '{} 'के साथ' कोई नहीं 'के साथ बदलकर मेरी मदद की। –
धन्यवाद, हांक, मैंने इस सवाल का नाम बदल दिया है ताकि –