【问题标题】:Python: multiplication overridePython:乘法覆盖
【发布时间】:2011-10-17 01:59:09
【问题描述】:

所以,我有一个自定义类,它有一个__mul__ 函数,可以与整数一起使用。但是,在我的程序(在库中)中,它被反过来调用,即 2 * x 其中 x 属于我的班级。有没有办法让它使用我的__mul__ 函数?

【问题讨论】:

    标签: python overriding operator-keyword


    【解决方案1】:

    只需将以下内容添加到类定义中就可以了:

    __rmul__ = __mul__
    

    【讨论】:

    • 请注意,这并不总是您想要的。假设您有向量和矩阵类,并且您想通过将向量视为 1xN 矩阵来定义它们之间的乘法。矩阵乘法不可交换,因此您需要重新切换参数的顺序。
    【解决方案2】:

    同时实现__rmul__

    class Foo(object):
        def __mul__(self, other):
            print '__mul__'
            return other
        def __rmul__(self, other):
            print '__rmul__'
            return other
    
    x = Foo()
    2 * x # __rmul__
    x * 2 # __mul__
    

    【讨论】:

    • 但是x * x 给出:<__main__.Foo at 0x7f8604be1e50> 如何处理这个?
    猜你喜欢
    • 2013-01-14
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 2018-01-07
    • 2010-11-24
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多