【发布时间】:2018-11-03 19:27:41
【问题描述】:
我想为复杂类型创建一个新的__str__ 方法。
import numpy as np
class Phasor(complex):
def __str__(self):
magnitude = (self.real**2 + self.imag**2)**.5
angle = np.arctan2(self.imag, self.real)
return "%s ∠ %s°" % (round(magnitude, 2), round(np.degrees(angle), 2))
a = Phasor(1+1j)
print(a)
print(type(a))
print(a**2)
print(type(a**2))
返回
1.41 ∠ 45.0°
<class '__main__.Phasor'>
2j
<type 'complex'>
在这种情况下,将实例提升到幂返回复杂类型实例而不是子类实例。
我希望继承的方法返回子类的新实例而不是复杂的。
【问题讨论】:
-
您必须实现所有负责算术的特殊方法,例如
__add__、__mul__、__div__等。 -
@Aran-Fey 是否有可能创建一个包装这样的方法调用的方法?
-
@NChauhan 当然,你可以编写一个类装饰器来自动为你创建这些方法。
标签: python inheritance subclass