我正在上一门Python课程,练习的目的是创建一个类,您可以在其中输入以下内容来添加字典:dict1 = dict1 + dict2
因此,这是通过在类中创建__add__
方法来完成的,因为dict1 + dict2
与键入dict1.__add__(dict2)
相同,对吗?除非我键入这两个命令,否则它们不会返回相同的值。这是我的代码的摘录:
class zDict(dict):
...
def __add__(self, otherDict):
otherDict = [(k,v) for k,v in otherDict.items()]
print("passed through zDict.__add__") #just to make sure
for key, value in otherDict:
self[key]=value
...
因此,现在如果我们使用2个zDict对象(例如dict1 = {'a':1,'b':2,'c':3}
和dict2 = {'d':4,'e':5}
来运行),结果如下(Python 3.6.6):
>>> dict1.__add__(dict2)
passed through zDict.__add__
>>> dict1
>>> {'a':1,'b':2,'c':3,'d':4,'e':5}
>>> type(dict1)
>>> <class '__main__.zDict'>
RESTART
>>> dict1 += dict2
passed through zDict.__add__
>>> dict1
>>> type(dict1)
>>> <class 'NoneType'>
所以我不明白。我输入了相同的内容,但得到了不同的结果。 dict1 = dict1 + dict2
与键入dict1 += dict2
相同,与键入dict1 = dict1.__add__(dict2)
相同,对吗?而且我确保它们通过相同的方法进行打印。它不能来自dict class
,因为它没有任何__add__
方法。也许它通过诸如对象之类的父类的方法传递,谁将类型更改为NoneType
?我该如何检查并防止这种情况发生?
答案 0 :(得分:0)
zDict.__add__()
将返回None
(即您将自己更改为原位)
dict1 += dict2
与dict1 = dict1.__add__(dict2)
还为什么不使用dict.update()
?
答案 1 :(得分:0)
+=
使用__iadd__
方法实现,请参见this answer