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
一起進群溝通交流~
推薦連結
- 詳解Python魔法函式,init,str,del等
- (譯)Python魔法方法指南