2

次のような単純なクラスが与えられた場合

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 と不平を言うのはなぜですか? また、これをどのように修正できますか?5round(Vector([-3.1,4]))TypeError: a float is required[-3,4]

通常は浮動小数点数を返す必要があることはわかってroundいますが、この例のようなベクトルの場合、考えられる意味にはおそらくあいまいさがないので、単純にオーバーライドできないのはなぜですか? をサブクラス化するか、代わりにnumbers.Real定義する必要がありますか?Vector(...).round(n)

4

1 に答える 1