什麼是Python魔法方法?
魔法方法就如同它的名字一樣神奇,總能在你需要的時候爲你提供某種方法來讓你的想法實現。魔法方法是指Python內部已經包含的,被雙下劃線所包圍的方法,這些方法在進行特定的操作時會自動被調用,它們是Python面向對象下智慧的結晶。初學者掌握Python的魔法方法也就變得尤爲重要了。
爲什麼要使用Python魔法方法?
使用Python的魔法方法可以使Python的自由度變得更高,當不需要重寫時魔法方法也可以在規定的默認情況下生效,在需要重寫時也可以讓使用者根據自己的需求來重寫部分方法來達到自己的期待。而且衆所周知Python是支持面向對象的語言Python的基本魔法方法就使得Python在面對對象方面做得更好。
基礎魔法方法(較爲常用)
new(cls[, …]) 纔是實例化對象調用的第一個方法,它只取下 cls 參數,並把其他參數傳給 init。 __new__很少使用,但是也有它適合的場景(單例模式),尤其是當類繼承自一個像元組或者字符串這樣不經常改變的類型的時候。
init(self[, …])構造方法,初始化類的時候被調用
del(self)析構方法,當實例化對象被徹底銷燬時被調用(實例化對象的所有指針都被銷燬時被調用)
call(self[, args…])允許一個類的實例像函數一樣被調用:x(a, b) 調用 x.call(a, b)
len(self)定義當被 len() 調用時的行爲__repr__(self)定義當被 repr() 調用時的行爲
str(self)定義當被 str() 調用時的行爲__bytes__(self)定義當被 bytes() 調用時的行爲
hash(self)定義當被 hash() 調用時的行爲
bool(self)定義當被 bool() 調用時的行爲,應該返回 True 或 False
format(self, format_spec)定義當被 format() 調用時的行爲
屬性相關的方法
getattr(self, name)定義當用戶試圖獲取一個不存在的屬性時的行爲
getattribute(self, name)定義當該類的屬性被訪問時的行爲
setattr(self, name, value)定義當一個屬性被設置時的行爲
delattr(self, name)定義當一個屬性被刪除時的行爲
dir(self)定義當 dir() 被調用時的行爲
get(self, instance, owner)定義當描述符的值被取得時的行爲
set(self, instance, value)定義當描述符的值被改變時的行爲
delete(self, instance)定義當描述符的值被刪除時的行爲
比較操作符
lt(self, other)定義小於號的行爲:x < y 調用 x.lt(y)
le(self, other)定義小於等於號的行爲:x <= y 調用 x.le(y)
eq(self, other)定義等於號的行爲:x == y 調用 x.eq(y)
ne(self, other)定義不等號的行爲:x != y 調用 x.ne(y)
gt(self, other)定義大於號的行爲:x > y 調用 x.gt(y)
ge(self, other)定義大於等於號的行爲:x >= y 調用 x.ge(y)
類型轉換
complex(self)定義當被 complex() 調用時的行爲(需要返回恰當的值)
int(self)定義當被 int() 調用時的行爲(需要返回恰當的值)
float(self)定義當被 float() 調用時的行爲(需要返回恰當的值)round(self[, n])定義當被 round() 調用時的行爲(需要返回恰當的值)
容器類型(一般用於操作容器類)
len(self)定義當被 len() 調用時的行爲(一般返回容器類的長度)
getitem(self, key)定義獲取容器中指定元素的行爲,相當於 self[key]
setitem(self, key, value)定義設置容器中指定元素的行爲,相當於 self[key] = value
delitem(self, key)定義刪除容器中指定元素的行爲,相當於 del self[key]
iter(self)定義當迭代容器中的元素的行爲
reversed(self)定義當被 reversed() 調用時的行爲
contains(self, item)定義當使用成員測試運算符(in 或 not in)時的行爲