詳解Python魔法函式,__init__,__str__,__del__

Python魔法师發表於2024-03-07

1、簡介

Python作為一門靈活而強大的程式語言,提供了許多特殊的方法,被稱為魔法函式(Magic methods)。這些魔法函式以雙下劃線開頭和結尾,能夠讓我們自定義類的行為,使得Python更加靈活和易用。本文將詳細介紹Python中的魔法函式,幫助讀者理解其作用和用法。

1.1、什麼是魔法函式?

魔法函式(Magic methods),也被稱為特殊方法(Special methods)或雙下劃線方法(Dunder methods),是Python中的一種特殊的方法。它們以雙下劃線開頭和結尾,例如__init____str____repr__等。

這些方法在類定義中具有特殊的含義,Python會在特定的情況下自動呼叫它們。透過實現這些魔法函式,我們可以自定義類的行為,使其具有更多的靈活性和功能。

魔法函式可以用於控制物件的建立與銷燬、字串表示、運算子過載、容器操作、屬性訪問等多種情況。例如,__init__方法用於初始化物件,在物件建立時被呼叫;__str__方法控制物件在被轉換為字串時的行為;__getitem____setitem__方法用於實現物件的索引操作等。

2、魔法函式分類

魔法函式可以分為幾類,包括物件建立與銷燬、字串表示、運算子過載、容器操作等。每種型別的魔法函式都有特定的作用,下面我們將逐一介紹。

物件建立與銷燬

  • __new__(cls, *args, **kwargs): 用於建立物件例項,在__init__之前呼叫。
  • __init__(self, *args, **kwargs): 物件初始化方法,在建立物件後立即呼叫。
  • __del__(self): 物件銷燬方法,在物件被銷燬時呼叫。

字串表示

  • __str__(self): 控制物件轉換為字串的行為,透過str(object)print(object)呼叫。
  • __repr__(self): 控制物件轉換為可供直譯器讀取的字串的行為,透過repr(object)呼叫。

容器操作

  • __len__(self): 控制物件長度的行為,透過len(object)呼叫。
  • __getitem__(self, key): 控制物件索引操作的行為,透過object[key]呼叫。
  • __setitem__(self, key, value): 控制物件賦值操作的行為,透過object[key] = value呼叫。
  • __delitem__(self, key): 控制物件刪除操作的行為,透過del object[key]呼叫。
  • __iter__(self): 返回一個迭代器物件,用於物件的迭代操作。

比較操作

  • __eq__(self, other): 控制物件相等性比較的行為,透過object1 == object2呼叫。
  • __ne__(self, other): 控制物件不等性比較的行為,透過object1 != object2呼叫。
  • __lt__(self, other): 控制物件小於比較的行為,透過object1 < object2呼叫。
  • __gt__(self, other): 控制物件大於比較的行為,透過object1 > object2呼叫。
  • __le__(self, other): 控制物件小於等於比較的行為,透過object1 <= object2呼叫。
  • __ge__(self, other): 控制物件大於等於比較的行為,透過object1 >= object2呼叫。

數值運算

  • __add__(self, other): 控制物件加法運算的行為,透過object1 + object2呼叫。
  • __sub__(self, other): 控制物件減法運算的行為,透過object1 - object2呼叫。
  • __mul__(self, other): 控制物件乘法運算的行為,透過object1 * object2呼叫。
  • __truediv__(self, other): 控制物件真除運算的行為,透過object1 / object2呼叫。
  • __floordiv__(self, other): 控制物件整除運算的行為,透過object1 // object2呼叫。
  • __mod__(self, other): 控制物件取模運算的行為,透過object1 % object2呼叫。
  • __pow__(self, other[, modulo]): 控制物件冪運算的行為,透過object1 ** object2呼叫。

屬性訪問

  • __getattr__(self, name): 控制對不存在的屬性的訪問。
  • __setattr__(self, name, value): 控制對屬性的賦值操作。
  • __delattr__(self, name): 控制對屬性的刪除操作。

其他

  • __contains__(self, item): 控制物件成員關係測試的行為,透過item in object呼叫。
  • __call__(self, *args, **kwargs): 控制物件的呼叫行為,使物件可以像函式一樣被呼叫。

這些是Python中常見的魔法函式,透過實現其中的一個或多個,我們可以對類的行為進行高度定製化。

3、重寫魔法函式

除了使用Python提供的魔法函式預設功能外,我們還可以重寫類的魔法函式,以實現特定的行為。

例如:重寫__str__函式,但是裡面只返回123,這樣在print物件時,就會列印123,而不是物件的地址。

class MyClass:
    def __str__(self):
        return '123'

obj = MyClass()
print(obj)  # 輸出: 123

4、總結

透過本文的介紹,相信你應該對Python中的魔法函式有了基礎的瞭解。魔法函式為我們提供了豐富的功能和靈活的定製選項,使得我們能夠更加輕鬆地編寫出強大而優雅的Python程式碼,希望你能夠透過本文的學習,更加熟練地運用魔法函式,提高自己的程式設計水平。

關注公眾號【Python魔法師】,回覆python 一起進群溝通交流~

qrcode.jpg

推薦連結

  • 詳解Python魔法函式,init,str,del等
  • (譯)Python魔法方法指南

相關文章