作者robert780612 (.....)
看板Python
標題[問題] 建立dictionary的子類別
時間Tue Oct 22 02:36:46 2013
小弟剛接觸python3,想嘗試做出一個可以相加的字典
將d和dd設成
d = additivedict(b=[1, 11], c=[2])
dd = additivedict(b=[111], d=[3], e=[4])
目標是讓d+dd變成
{'b':[1,11,111], 'c':[2], 'd':[3], 'd':[4]}
以下是我寫的程式
from collections import defaultdict
##import copy
class additivedict(defaultdict):
def __init__(self, **kwargs):
super().__init__(list)
if kwargs:
super().update(kwargs)
def __add__(self, other):
__sum = self ##這裡改用__sum = copy.copy(self)
for k, v in other.items():
__sum[k] += v
return __sum
if __name__ == '__main__':
d = additivedict()
dd = additivedict()
d['b'] += [1]
d['b'] += [11]
d['c'] += [2]
dd['b'] += [111]
dd['d'] += [3]
dd['e'] += [4]
這段程式是可以執行的,結果似乎也正確,但是執行d+dd後會將d的內容改變
因此我在中間有##的那行改成__sum = copy.copy(self)
程式就不能運作了,想請教問題出在哪裡,先謝謝各位了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.108.159
※ 編輯: robert780612 來自: 180.177.108.159 (10/22 02:39)
※ 編輯: robert780612 來自: 180.177.108.159 (10/22 02:39)
→ ck574b027:你應該說明不能運作是怎樣情況,有訊息嗎? 10/22 14:11
→ ck574b027:我跑了一下你的例子,copy 會呼叫該物件的 __copy__ 10/22 15:44
→ ck574b027:所以你 overwrite 一個試試看。 10/22 15:45
→ robert780612:謝謝 我改寫程式碼後就沒出現問題了 10/25 02:36