Переопределение оператора 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
Я получаю ошибку. Есть ли способ переопределить оператор add, чтобы работал 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)
называется еслиx.__sub__(y)
возвращаетсяNotImplemented
,
То же относится и к x + y
,
Кстати, вы, вероятно, хотите, чтобы ваш класс был подклассом object
, См. Какова цель создания подкласса класса "объект" в Python?