я определил новый класс модуль 7:Может ли дополнение между классами оцениваться классом второго аргумента?
class mod7:
def __init__(self, n):
self.val = n % 7
def __repr__(self):
return str(self.val)
Тогда
In [2]: a = mod7(18)
In [3]: a
Out[3]: 4
Я хотел, чтобы добавки не только mod7 объектов, но и целых к новому классу. Так что под классом я добавил
def __add__(self, other):
if type(other) is int:
return mod7(self.val + other)
if type(other) is mod7:
return mod7(self.val + other.val)
и
In [11]: a + mod7(5)
Out[11]: 2
In [12]: a + 5
Out[12]: 2
Однако
In [13]: 5 + a
Traceback (most recent call last):
File "<ipython-input-13-14fd8adcbf4d>", line 1, in <module>
5+a
TypeError: unsupported operand type(s) for +: 'int' and 'mod7'
Я понимаю, почему - Функция добавления называется классом 1-го аргумента. Мой вопрос: есть ли способ переопределить 5 + a
в соответствии с классом 2-го аргумента, то есть a
?
Вы можете добавить метод '__radd__' в свой класс. Однако следует отметить, что обычно модуль обычно определяется оператором. В противном случае, должен ли результат иметь модуль первого или второго аргумента? –
@JaredGoguen - Можете ли вы объяснить, что вы подразумеваете под «определением модуля на операторе»? Может ли он быть реализован в классе? – Aguy
Что такое (5% 7) + (7% 8)? Уравнение типа 5 (+% 4) 6 = 11% 4 = 3 имеет больше смысла. –