如何对具有基本类型作为子类的类进行运算,而结果属于同一类?
例如,运行:
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
如何在此类上正确执行算术运算?
答案 0 :(得分:2)
您需要先将self
和speed
都转换为float,然后再将其交给+
运算符,因为否则它将尝试再次在{{1 }}实例。这将在没有保释条件的情况下递归发生,最终会像您的情况一样出错。
Speed