作者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)
1F:→ ck574b027:你应该说明不能运作是怎样情况,有讯息吗? 10/22 14:11
2F:→ ck574b027:我跑了一下你的例子,copy 会呼叫该物件的 __copy__ 10/22 15:44
3F:→ ck574b027:所以你 overwrite 一个试试看。 10/22 15:45
4F:→ robert780612:谢谢 我改写程式码後就没出现问题了 10/25 02:36