如何在python中重载@?
How to overload @ in python?
我想为我写的 class 重载 python 中的运算符 @
。我知道一般如何重载运算符(即通过定义 __add__
和 __radd__
来重载 +
),但我找不到重载 @
.[=21 的方法=]
为什么我知道 @
可以重载:对于 numpy 数组,A@B
给出 A
和 B
的矩阵乘积,而 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)
我想为我写的 class 重载 python 中的运算符 @
。我知道一般如何重载运算符(即通过定义 __add__
和 __radd__
来重载 +
),但我找不到重载 @
.[=21 的方法=]
为什么我知道 @
可以重载:对于 numpy 数组,A@B
给出 A
和 B
的矩阵乘积,而 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)