为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

红糖糍粑 2021-08-24 15:21: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 += dict2passed through zDict.__add__>>> dict1>>> type(dict1)>>> <class 'NoneType'>所以我不明白那里。我输入了同样的东西,但得到了不同的结果。dict1 = dict1 + dict2和打字一样,打字dict1 += dict2也一样dict1 = dict1.__add__(dict2),对吧?而且我确保它们通过相同的方法打印。它不能来自dict class,因为它没有任何__add__方法。也许它通过来自父类(如对象)的方法,谁将类型更改为NoneType?我该如何检查并防止它?
查看完整描述

2 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

zDict.__add__()将返回None(即您将自己更改到位) dict1 += dict2dict1 = dict1.__add__(dict2)

还有为什么不使用dict.update()


查看完整回答
反对 回复 2021-08-24
?
梦里花落0921

TA贡献1772条经验 获得超5个赞

+=是使用该__iadd__方法实现的,请参阅此答案


查看完整回答
反对 回复 2021-08-24
  • 2 回答
  • 0 关注
  • 152 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信