Вопрос по методу __add__
Всем привет. Познаю Классы в python. Не могу понять реализацию метода add. Подскажите пожалуйста какая реализация более верная если между ними вообще есть разница (потому что результат выдают один и тот же)
class Example:
def __init__(self, number):
self.number = number
def __add__(self, other):
result = self.number + other.number
# result = Example(self.number + other.number)
return result
def __str__(self):
return str(self.number)
a = Example(20)
b = Example(10)
c = a + b
print(c)
Ответы (2 шт):
Автор решения: Qwertiy
→ Ссылка
Очевидно, что есть.
self.number + other.number - это число.
Example(self.number + other.number) - а это - инстанс твоего класса.
class Example:
def __init__(self, number):
self.number = number
def __add__(self, other):
return Example(self.number + other.number)
def __sub__(self, other):
return self.number - other.number
def doSmth(self):
print(self.number)
a = Example(7)
b = Example(42)
c = a + b
d = a - b
c.doSmth()
d.doSmth()
49
Traceback (most recent call last):
File "./prog.py", line 21, in <module>
AttributeError: 'int' object has no attribute 'doSmth'
Автор решения: Danis
→ Ссылка
правильно будет так:
result = Example(self.number + other.number)
потому что так в result будет объект типа Example
а так:
result = self.number + other.number
в result будет объект типа int
пример:
a = Example(20)
b = Example(10)
c = a + b
c = c + Example(5)
print(c)
если использовать result = Example(self.number + other.number) то все будет нормально, а если result = self.number + other.number то будет ошибка:
TypeError: unsupported operand type(s) for +: 'int' and 'Example'