【发布时间】:2019-04-23 21:04:55
【问题描述】:
我正在学习 Python 课程,练习是创建一个类,您可以在其中通过键入以下内容将字典附加到另一个类:dict1 = dict1 + dict2
所以这是通过在类中创建一个__add__ 方法来完成的,因为dict1 + dict2 与输入dict1.__add__(dict2) 相同,对吧?除了如果我键入这 2 个命令,它们不会返回相同的值。这是我的代码的摘录:
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) 相同,对吧?我确保他们通过与 print 相同的方法。它不能来自dict class,因为它没有任何__add__ 方法。也许它通过来自像对象这样的父类的方法,谁将类型更改为 NoneType ?我该如何检查并防止它发生?
【问题讨论】:
-
这是因为你没有从
__add__返回任何东西
标签: python dictionary