如何在python中重载@?

How to overload @ in python?

我想为我写的 class 重载 python 中的运算符 @。我知道一般如何重载运算符(即通过定义 __add____radd__ 来重载 +),但我找不到重载 @.[=21 的方法=]

为什么我知道 @ 可以重载:对于 numpy 数组,A@B 给出 AB 的矩阵乘积,而 A*B 给出 Hadamard(逐元素)积。

您需要重载的方法是 __matmul____rmatmul__ 方法。例如。如果您想将内积添加到列表中:

class Vector(list):
    def __matmul__(self, other):
        return sum(x * y for x, y in zip(self, other))

    def __rmatmul__(self, other):
        return self.__matmul__(other)