在Python中定义方法别名?

Jér*_*tin 18 python overriding class operator-overloading operator-keyword

我有一个矢量类,我定义了__mul__将矢量乘以数字的方法.

这是__mul__方法:

def __mul__(self, other):
    x = self.x * other
    y = self.y * other
    new = Vector()
    new.set_pos((x, y))
    return new
Run Code Online (Sandbox Code Playgroud)

我的问题是我不知道数字和矢量之间是哪个.如果self是数字,则self.x会引发错误.(我可能会误解这一点:"其他"总是一个数字吗?)

所以我在这里找到:Python: 我可以做的乘法覆盖:

__rmul__ = __mul__
Run Code Online (Sandbox Code Playgroud)

但是我怎么能在课程定义中这样做呢?

就像是 :

def __rmul__ = __mul__
Run Code Online (Sandbox Code Playgroud)

kin*_*all 22

self永远不会是数字,__mul__()因为方法附加的对象不是数字,它是向量,根据定义,它是被乘数.

other如果您的对象乘以数字,则为数字.或者它可能是其他东西,例如另一个矢量,你可以测试和处理.

当您的对象是乘数时,__rmul__()如果被乘数不知道如何处理该操作,则调用该对象.

要处理其中__mul__并且__rmul__应该是相同方法的情况,因为操作是可交换的,所以您可以在类定义中执行赋值.

class Vector(object):
    def __mul__(self, other):
        pass

    __rmul__ = __mul__
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 11

只需将其列为属性:

__rmul__ = __mul__
Run Code Online (Sandbox Code Playgroud)

这与在模块中创建函数别名的方式相同; 在类体中创建方法的别名也是一样的.