Как выполнить арифметику для классов с базовым типом в качестве подкласса, где результат имеет тот же класс?
Например, работает:
class Speed(float):
def __add__(self, speed):
if isinstance(speed, Speed):
return Speed(self + speed)
else:
raise NotImplementedError()
def __repr__(self):
return f'Speed({self} mph)'
Speed(2) + Speed(2)
Результаты приведены ниже вместо ожидаемых Speed(4)
:
RecursionError Traceback (most recent call last)
<ipython-input-13-ce1336693f4a> in <module>
----> 1 Speed(2) + Speed(2)
<ipython-input-11-f161664be9bc> in __add__(self, speed)
3 def __add__(self, speed):
4 if isinstance(speed, Speed):
----> 5 return Speed(self + speed)
6 else:
7 raise NotImplementedError()
... last 1 frames repeated, from the frame below ...
<ipython-input-11-f161664be9bc> in __add__(self, speed)
3 def __add__(self, speed):
4 if isinstance(speed, Speed):
----> 5 return Speed(self + speed)
6 else:
7 raise NotImplementedError()
RecursionError: maximum recursion depth exceeded while calling a Python object
Как правильно выполнить арифметику на таком классе?