在python中实现运算符

在python中实现运算符,python,numpy,operators,Python,Numpy,Operators,可以在Python中实现运算符吗?像二元运算符一样,类似于+,-。。。例如,我从R中知道,每个操作符实际上都是一个函数,所以+是sumx,y或类似的东西。我想知道这是否也可以实现,例如,我可以将二进制运算符定义为:*。然后用它做一些事情,比如用它来做矩阵乘法,而不是Numpy中的点。我不确定是否可以在python中使用decorator来实现这一点。可以在这里找到用于实现运算符的特殊方法列表: 例如,要实现+=加法运算符,可以执行以下操作: class Adder(object): de

可以在Python中实现运算符吗?像二元运算符一样,类似于+,-。。。例如,我从R中知道,每个操作符实际上都是一个函数,所以+是sumx,y或类似的东西。我想知道这是否也可以实现,例如,我可以将二进制运算符定义为:*。然后用它做一些事情,比如用它来做矩阵乘法,而不是Numpy中的点。我不确定是否可以在python中使用decorator来实现这一点。

可以在这里找到用于实现运算符的特殊方法列表:

例如,要实现+=加法运算符,可以执行以下操作:

class Adder(object):
    def __init__(self, x):
        self.x = x

    def __iadd__(self, other):
        self.x += other.x
        return self

if __name__ == '__main__':

    a1 = Adder(0)
    a2 = Adder(1)
    a1 += a2
    print a1.x

Python中的运算符通过重载,例如uuu add uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。与Scala或Haskell不同,您不能声明新的运算符文字,例如*。。您也不能为以前定义的类重载运算符,因为实现必须是一个方法。

既然Numpy这样做了,那么这一定是可能的,您不同意吗?@KonradRudolph Numpy没有这样做!它完全执行:numpy.matrix[[1,2],[3,4]]*numpy.matrix[[5,6],[7,8]]执行矩阵乘法。只要其中一个操作数属于您定义的类型,就可以为现有类型重载运算符。但不能重载list+int或重新定义tuple+tuple。