次のような単純なクラスが与えられた場合
class Vector(object):
def __init__(self, value):
self.value = value
def __abs__(self):
return math.sqrt(sum([x**2 for x in self.value]))
def __round__(self, *n):
return [round(x,*n) for x in self.value]
whileがabs(Vector([-3,4]))
desiredの代わりにa と不平を言うのはなぜですか? また、これをどのように修正できますか?5
round(Vector([-3.1,4]))
TypeError: a float is required
[-3,4]
通常は浮動小数点数を返す必要があることはわかってround
いますが、この例のようなベクトルの場合、考えられる意味にはおそらくあいまいさがないので、単純にオーバーライドできないのはなぜですか? をサブクラス化するか、代わりにnumbers.Real
定義する必要がありますか?Vector(...).round(n)