Переопределение коммутативного оператора Python
Привет мне было интересно, есть ли способ сделать симметричное переопределение оператора в Python. Например, допустим, у меня есть класс:
class A:
def __init__(self, value):
self.value = value
def __add__(self, other):
if isinstance(other, self.__class__):
return self.value + other.value
else:
return self.value + other
тогда я могу сделать:
a = A(1)
a + 1
но если я попробую:
1 + a
Я получаю сообщение об ошибке. Есть ли способ переопределить оператор добавить так что 1 + a будет работать?
1 ответов
просто реализовать __radd__
метод в вашем классе. Как только класс int не может обрабатывать добавление,__radd__
если реализовано, берет его.
class A(object):
def __init__(self, value):
self.value = value
def __add__(self, other):
if isinstance(other, self.__class__):
return self.value + other.value
else:
return self.value + other
def __radd__(self, other):
return self.__add__(other)
a = A(1)
print a + 1
# 2
print 1 + a
# 2
например, для оценки выражения x - y, где Y-экземпляр класса, который имеет
__rsub__()
методy.__rsub__(x)
называется ifx.__sub__(y)
возвращаетNotImplemented
.
то же самое относится и к x + y
.
на стороне записки, вы, вероятно, хотите, чтобы ваш класс подкласс object
. Видеть какова цель подкласса класса "object" в Python?