Переопределение оператора 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?

Другие вопросы по тегам