【问题标题】:How come self.__add__(a) and self + a doesn't return the same values in dictionaries?为什么 self.__add__(a) 和 self + a 不会在字典中返回相同的值?
【发布时间】: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


【解决方案1】:

+=是使用__iadd__方法实现的,见this answer

【讨论】:

    【解决方案2】:

    zDict.__add__() 将返回None (即你改变自我到位) dict1 += dict2dict1 = dict1.__add__(dict2) 相同

    为什么不使用dict.update()

    【讨论】:

    • 由于某种原因 dict.update() 也返回 noneType
    猜你喜欢
    • 2018-01-31
    • 1970-01-01
    • 2013-04-18
    • 2012-03-17
    • 2020-04-13
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    相关资源
    最近更新 更多