Оператор переопределения для обработки ни одного типа - PullRequest
0 голосов
/ 08 октября 2018

Как мне переопределить __iadd__, чтобы он обрабатывал None?

пример:

var = None
myObject = MyObject()
var += myObject
var == myObject
>> True

Если я просто переопределю __iadd__ в myObject для обработки добавления двухMyObject вместе, я получаю эту ошибку:

Трассировка (последний последний вызов):
Файл "", строка 1, в TypeError: неподдерживаемые типы операндов для + =: 'NoneType' и 'myObject'

1 Ответ

0 голосов
/ 08 октября 2018

Проблема в том, что если var = None, то метод __iadd__ вызывается None, а не MyObject

class myobject:
    def __iadd__(self, other):
        if other is None:
            return self
        else:
            pass # Do stuff here

Это прекрасно работает:

var = myobject()
var += None

Но этоwont:

var = None
var += myobject()

Лучший способ справиться с этим - просто поймать ошибку:

try:
    var += myobject()
except TypeError:
    var = myobject()
...