为什么 self.__add__(a) 和 self + a 在字典中没有返回相同的值?

我正在学习 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),对吧?而且我确保它们通过相同的方法打印。它不能来自dict class,因为它没有任何__add__方法。也许它通过来自父类(如对象)的方法,谁将类型更改为NoneType?我该如何检查并防止它?


红糖糍粑
浏览 153回答 2
2回答

慕运维8079593

zDict.__add__()将返回None(即您将自己更改到位)&nbsp;dict1 += dict2与dict1 = dict1.__add__(dict2)还有为什么不使用dict.update()?

梦里花落0921

+=是使用该__iadd__方法实现的,请参阅此答案
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python