Python: Оператор, Перегружающий определенный тип

Я хотел бы смочь иметь оператор своего класса, взаимодействуют с регулярными типами способом, что я определяю. Позволяет говорят, например, я имею:

class Mynum(object):
  def __init__(self, x):
   self.x = x
  def __add__(self, other):
   return self.x + other.x

a = Mynum(1)
b = Mynum(2)

print a+b

Это работает просто великолепно, но теперь если я пытаюсь сделать:

print a+2

Я получаю ошибку начиная с int не назвали участника x. Как я определяю Mynum + int в классе? Это походит на задание для декораторов или метаклассов, но я ужасно незнаком с их использованием. Этот вопрос кажется подобным, но не совсем идентичным.

5
задан Community 23 May 2017 в 12:16
поделиться

2 ответа

def __add__(self, other):
    if isinstance(other, self.__class__):
        return self.x + other.x
    elif isinstance(other, int):
        return self.x + other
    else:
        raise TypeError("unsupported operand type(s) for +: '{}' and '{}'").format(self.__class__, type(other))
14
ответ дан 18 December 2019 в 07:53
поделиться
class Mynum(object):
    def __init__(self, x):
        self.x = x
    def __add__(self, other):
        try:
            return self.x + other.x
        except AttributeError:
            return self.x + other
    __radd__=__add__

a = Mynum(1)
b = Mynum(2)

print(a+b)
# 3
print(a+2)
# 3
print(2+a)
# 3
4
ответ дан 18 December 2019 в 07:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: