singledispatchmethod使用它所使用的类?

2024-09-28 22:35:16 发布

您现在位置:Python中文网/ 问答频道 /正文

在实践中,我试图为2d向量构建一个类,我想重写乘法运算符,以便能够将一个向量与标量相乘,也可以与另一个向量(点积)相乘。 这种基于单参数的多态性通常是通过@functools.singledispatchmethod decorator实现的。我的问题是,从我在网上发现的情况来看,我无法引用我定义为自身主体中的类型的类。我希望这样做是为了定义mul函数的变体,并将其注册为接收类型“vector”,这正是我在本正文中定义的类型。。有没有一种优雅的方法可以做到这一点

class vector:
    def __init__(self,x,y):
        self.x = x
        self.y = y

    @functools.singledispatchmethod
    def __mul__(self, x):
        pass

    @__mul__.register(int)
    def mul_by_scalar(self, s):
        return vector(self.x * s, self.y * s)

    @__mul__.register(vector)
    def mul_by_vec(self, v):
        return self.x*v.x + self.y*v.y

当我运行它时,Python预期不会识别“vector”


Tags: selfregister类型byreturn定义def运算符