重载python中的任意运算符

Nachiket Gokhale:

是否可以在Python中重载任意运算符?还是仅限于具有相关魔术方法的运算符列表,如下所示:https : //www.python-course.eu/python3_magic_methods.php

我问是因为我注意到Numpy使用@运算符执行矩阵乘法,例如C = A @ B其中A,B是Numpy数组,我想知道他们是如何做到的。

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

有人可以指出我完成此操作的Numpy来源吗?

肯儿:

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

但是,您链接到的列表不完整。在Python 3.5中,他们为@运算符添加了特殊方法这是Python运算符模块文档中相当简洁的清单这是有关运算符重载的文档

operator.matmul(a, b)

operator.__matmul__(a, b)

返回a @ b

3.5版的新功能。

我没有亲自见过那个操作员,所以我做了一些研究。它专门用于矩阵乘法但是,我可以将其用于其他目的,尽管出于风格考虑,我会反对这样做:

In [1]: class RichGuyEmailAddress(str): 
   ...:     def __matmul__(self, domain_name): 
   ...:         return f'{self}@{domain_name}' 
   ...:                                                                                                                                                                                       

In [2]: my_email = RichGuyEmailAddress('billg') @ 'microsoft.com'                                                                                                                              

In [3]: print(my_email)                                                                                                                                                                       
[email protected]

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章