python中任意运算符的重载

python中任意运算符的重载,python,numpy,overloading,magic-methods,Python,Numpy,Overloading,Magic Methods,可以在Python中重载任意运算符吗?或者只限于具有此处列出的相关魔术方法的运算符列表: 我问这个问题是因为我注意到Numpy使用@运算符来执行矩阵乘法,例如C=A@B其中A,B是Numpy数组,我想知道它们是如何实现的 编辑:@运算符不在我链接的列表中 有人能给我指一下Numpy源代码吗?在Python中,您不能创建新的运算符,不。通过定义这些“神奇”函数,您可以影响使用标准运算符操作自己定义的对象时发生的情况 但是,您链接到的列表不完整。在Python3.5中,他们为@操作符添加了特殊方法。

可以在Python中重载任意运算符吗?或者只限于具有此处列出的相关魔术方法的运算符列表:

我问这个问题是因为我注意到Numpy使用@运算符来执行矩阵乘法,例如C=A@B其中A,B是Numpy数组,我想知道它们是如何实现的

编辑:@运算符不在我链接的列表中


有人能给我指一下Numpy源代码吗?

在Python中,您不能创建新的运算符,不。通过定义这些“神奇”函数,您可以影响使用标准运算符操作自己定义的对象时发生的情况

但是,您链接到的列表不完整。在Python3.5中,他们为
@
操作符添加了特殊方法。和

operator.matmul(a,b)

operator.\uuuu matmul\uuuu(a,b)

返回
a@b

3.5版中的新版本

我没有亲自见过那个接线员,所以我做了更多的研究。它是专门为你设计的。但是,我可以将其用于其他目的,尽管我反对将其作为一种风格:

[1]中的
:类地址(str):
…:def uuu matmul uuuu(自我,域名):
…:返回f'{self}@{domain_name}'
...:                                                                                                                                                                                       
在[2]中:my_email=RichGuyEmailAddress('billg')@'microsoft.com'
在[3]:打印(我的电子邮件)
billg@microsoft.com

因此,不,您不能重载任何随机字符,但可以重载
@
运算符。

该列表已过时。谢谢,我知道我应该查看文档,但不知道从何开始。您的文档引用是用于另一种用途的-它用于调用运算符的一对函数,而不是用于挂钩使操作员过载。
\uuuu matmul\uuuu
钩子的文档是,以及
\uuuu rmatmul\uuu
\uuu imatmul\uuuu
.hmm,这些文档也非常简洁。我发现操作员文档更有用,但我更新了答案以链接到这两个文档。谢谢这个例子。除了澄清我的问题,它还帮助我更好地理解继承和str&repr函数。