Python中如何實現運算符的重載,即實現例如a+b這樣的運算符操作呢?
目前累計服務客戶超過千家,積累了豐富的產品開發及服務經驗。以網站設計水平和技術實力,樹立企業形象,為客戶提供網站設計、成都做網站、網站策劃、網頁設計、網絡營銷、VI設計、網站改版、漏洞修補等服務。創新互聯公司始終以務實、誠信為根本,不斷創新和提高建站品質,通過對領先技術的掌握、對創意設計的研究、對客戶形象的視覺傳遞、對應用系統的結合,為客戶提供更好的一站式互聯網解決方案,攜手廣大客戶,共同發展進步。
在C++中可以使用 operator 關鍵字實現運算符的重載。但是在Python中沒有類似這樣的關鍵字,所以要實現運算符的重載,就要用到Python的魔法函數。Python魔法函數是以雙下劃線開頭,雙下劃線結尾的一組函數。我們在類定義中最常用到的 __init__ 函數就是這樣一個魔法函數,它在創建類對象時被自動調用。
下面我們來看個簡單的例子。
上述代碼示例了幾個魔法函數的用法。 __add__ 函數對應了二元運算符+,當執行a+b語句時,python就會自動調用a. add (b)。 對于上述例子中的v1+v2+v3,則相當于調用了(v1. add(v2)). add(v3)。
代碼中還有一個在Python類定義經常使用的 __str__ 函數,當使用 str() 時會被調用。print函數對傳入的參數都調用了str()將其轉換成易讀的字符串形式,便于打印輸出,因而會調用類定義的__str__函數打出自定義的字符串。
代碼中還有一個特殊的 __call__ 函數,該函數在將對象采用函數調用方式使用時被調用, 例如v1()相當于v1. call ()。
以上就是魔法函數的基本使用方法。常見的魔法函數我們可以使用 dir() 函數來查看。
輸出結果為:
上述結果中形式為‘__函數名__’的函數為魔法函數,注意有些對象也是這種形式,例如__class__, __module__等, 這些不是魔法函數。具體的魔法函數說明可以參考Python官方說明文檔。
以上代碼在Python3.6運行通過.
def magic_square(input_file):
import xlrd
data=xlrd.open_workbook(input_file)
sheet1=data.sheet_by_index(0)
i=0
result=[]
diag1=0
diag2=0
while i4:
row=sheet1.row_values(i)
col=sheet1.col_values(i)
add1=0
add2=0
for ele in range(0,len(row)):
add1=add1+row[ele]
add2=add2+row[ele]
result.append(add1)
result.append(add2)
diag1=diag1+row[i]
diag2=diag2+row[3-i]
i=i+1
result.append(diag1)
result.append(diag2)
result=set(result)
if len(result)1:
print('False')
else:
print('True')
注意格式,看下面這個圖
魔方方法是Python的內置方法,無需主動調用,主要目的就是為了給Python的解釋器進行調用,而且每個魔方方法都有一個對應的內置函數或運算符,接下來我們來看看具體的介紹。
魔法方法就是可以給你的類增加魔力的特殊方法,如果你的對象實現(重載)了這些方法中的某一個, 那么這個方法就會在特殊的情況下被Python所調用,你可以定義自己想要的行為,而這一切都是自動發 生的,它們經常是兩個下劃線包圍來命名的(比如 __init___ , __len__ ),Python的魔法方法是非常強大的所以了解其使用方法也變得尤為重要!
__init__ 構造器,當一個實例被創建的時候初始化的方法,但是它并不是實例化調用的第一個方法。
__new__ 才是實例化對象調用的第一個方法,它只取下cls參數,并把其他參數傳給 __init___。
___new__ 很少使用,但是也有它適合的場景,尤其是當類繼承自一個像元祖或者字符串這樣不經常改變的類型的時候。
__call__ 讓一個類的實例像函數一樣被調用。
__getitem__ 定義獲取容器中指定元素的行為,相當于self[key]。
__getattr__ 定義當用戶試圖訪問一個不存在屬性的時候的行為。
__setattr__ 定義當一個屬性被設置的時候的行為。
__getattribute___ 定義當一個屬性被訪問的時候的行為。
當前名稱:python魔方函數 python魔術方法的意義
文章路徑:http://m.kartarina.com/article28/dogesjp.html
成都網站建設公司_創新互聯,為您提供微信小程序、搜索引擎優化、網站營銷、網站改版、定制開發、面包屑導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯