Я прохожу курс 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
?Как я могу это проверить и предотвратить?