Я хотел бы смочь иметь оператор своего класса, взаимодействуют с регулярными типами способом, что я определяю. Позволяет говорят, например, я имею:
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
в классе? Это походит на задание для декораторов или метаклассов, но я ужасно незнаком с их использованием. Этот вопрос кажется подобным, но не совсем идентичным.
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))
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