簡體   English   中英

在 python 中重載任意運算符

[英]overloading arbitrary operator in python

是否可以重載 Python 中的任意運算符? 還是僅限於具有相關魔術方法的運算符列表,如下所示: https://www.python-course.eu/python3_magic_methods.php

我之所以問,是因為我注意到 Numpy 使用 @ 運算符執行矩陣乘法,例如 C=A@B 其中 A,B 是 Numpy arrays,我想知道他們是怎么做到的。

編輯:@ 運算符不在我鏈接到的列表中。

有人可以指出我完成此操作的 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)                                                                                                                                                                       
billg@microsoft.com

所以,不,你不能重載任何隨機字符,但你可以重載@運算符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM