为了实践,我正在尝试为二维向量构建一个类,我想覆盖乘法运算符,以便能够将向量乘以标量,也可以乘以另一个向量(点积)。这种基于单个参数的多态性通常使用 @functools.singledispatchmethod 装饰器来实现。我的问题是,从我在网上找到的内容来看,我无法将我定义为它自己体内的类型的类引用。我希望这样做是为了定义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 预计不会识别“向量”。