Вопрос по методу __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) - а это - инстанс твоего класса.

https://ideone.com/CnrZDS

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'
→ Ссылка