Python魔法方法詳解

2022-09-28 09:03:10 字數 4473 閱讀 1814

據說,python 的物件天生擁有一些神奇的方法,它們總被雙下劃線所包圍,他們是物件導向的 python 的一切。

他們是可以給你的類增加魔力的特殊方法,如果你的物件實現(過載)了這些方法中的某乙個,那麼這個方法就會在特殊的情況下被 python 所呼叫,你可以定義自己想要的行為,而這一切都是自動發生的。

python 的魔術方法非常強大,然而隨之而來的則是責任。了解正確的方法去使用非常重要!

魔法方法

含義基本的魔法方法

__new__(cls[, ...])

__del__(self) 析構器,當乙個例項被銷毀的時候呼叫的方法

__call__(self[, args...]) 允許乙個類的例項像函式一樣被呼叫:x(a, b) 呼叫 x.__call__(a, b)

__len__(self) 定義當被 len() 呼叫時的行為

__repr__(self) 定義當被 repr() 呼叫時的行為

__str__(self) 定義當被 str() 呼叫時的行為 類似於j**a中tostring方法

__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)

算數運算子

__add__(self, other) 定義加法的行為:+

__sub__(self, other) 定義減法的行為:-

__mul__(self, other) 定義乘法的行為:*

__truediv__(self, other) 定義真除法的行為:/

__floordiv__(self, other) 定義整數除法的行為://

__mod__(self, other) 定義取模演算法的行為:%

__divmod__(self, other) 定義當被 divmod() 呼叫時的行為

__pow__(self, other[, modulo]) 定義當被 power() 呼叫或 ** 運算時的行為

__lshift__(self, other) 定義按位左移位的行為:<<

__rshift__(self, other) 定義按位右移位的行為:>>

__and__(self, other) 定義按位與操作的行為:&

__xor__(self, other) 定義按位異或操作的行為:^

__or__(self, other) 定義按位或操作的行為:|

反運算__radd__(self, other) (與上方相同,當左運算元不支援相應的操作時被呼叫)

__rsub__(self, other) (與上方相同,當左運算元不支援相應的操作時被呼叫)

__rmul__(self, other) (與上方相同,當左運算元不支援相應的操作時被呼叫)

__rtruediv__(self, other) (與上方相同,當左運算元不支援相應的操作時被呼叫)

__rfloordiv__(self, other) (與上方相同,當左運算元不支援相應的操作時被呼叫)

__rmod__(self, other) (與上方相同,當左運算元不支援相應的操作時被呼叫)

__rdivmod__(self, other) (與上方相同,當左運算元不支援相應的操作時被呼叫)

__rpow__(self, other) (與上方相同,當左運算元不支援相應的操作時被呼叫)

__rlshift__(self, other) (與上方相同,當左運算元不支援相應的操作時被呼叫)

__rrshift__(self, other) (與上方相同,當左運算元不支援相應的操作時被呼叫)

__rxor__(self, othuufaimlywer) (與上方相同,當左運算元不支援相應的操作時被呼叫)

__ror__(self, www.cppcns.comother) (與上方相同,當左運算元不支援相應的操作時被呼叫)

增量賦值運算

__iadd__(self, other) 定義賦值加法的行為:+=

__isub__(self, other) 定義賦值減法的行為:-=

__imul__(self, other) 定義賦值乘法的行為:*=

__itruediv__(self, other) 定義賦值真除法的行為:/=

__ifloordiv__(self, other) 定義賦值整數除法的行為://=

__imod__(self, other) 定義賦值取模演算法的行為:%=

__ipow__(self, other[, modulo]) 定義賦值冪運算的行為:**=

__ilshift__(self, other) 定義賦值按位左移位的行為:<<=

__irshift__(self, other) 定義賦值按位右移位的行為:>>=

__iand__(self, other) 定義賦值按位與操作的行為:&=

__ixor__(self, other) 定義賦值按位異或操作的行為:^=

__ior__(self, other) 定義賦值按位或操作的行為:|=

一元操作符

__neg__(self) 定義正號的行為:+x

__pos__(self) 定義負號的行為:-x

__abs__(self) 定義當被 abs() 呼叫時的行為

__invert__(self) 定義按位求反的行為:~x

型別轉換

__complex__(self) 定義當被 complex() 呼叫時的行為(需要返回恰當的值)

__int__(self) 定義當被 int() 呼叫時的行為(需要返回恰當的值)

__float__(self) 定義當被 float() 呼叫時的行為(需要返回恰當的值)

__round__(self[, n]) 定義當被 round() 呼叫時的行為(需要返回恰當的值)

__index__(self)

上下文管理(with 語句)

__www.cppcns.comenter__(self)

1. 定義當使用 with 語句時的初始化行為

2. __enter__ 的返回值被 with 語句的目標或者 as 後的名字繫結

__exit__(self, exc_type, exc_value, traceback)

1. 定義當乙個**塊被執行或者終止後上下文管理器應該做什麼

2. 一般被用來處理異常,清除工作或者做一些**塊執行完畢之後的日常工作

容器型別

__len__(self) 定義當被 len() 呼叫時的行為(返回容器中元素的個數)

__getitem__(self, key) 定義獲取容器中指定元素的行為,相當於 self[key]

__setitem__(self, key, value) 定義設定容器中指定元素的行為,相當於 uufaimlywself[key] = value

__delitem__(self, key) 定義刪除容器中指定元素的行為,相當於 del self[key]

__iter__(self) 定義當迭代容器中的元素的行為

__reversed__(self) 定義當被 reversed() 呼叫時的行為

__contains__(self, item) 定義當使用成員測試運算子(in 或 not in)時的行為

總結

Python魔法方法 基本的魔法方法

new cls 1.new 是在乙個物件例項化時候所呼叫的第乙個方法 2.他的第乙個引數是這個類,其他的引數是用來直接傳遞給 init 方法 3.new 決定是否使用該 init 方法,因為.new 可以直接呼叫其他類的構造方法,或者返回別的例項物件來作為本類的例項,如果 new 沒有返回例項物件,...

python 魔法方法

魔法方法具有一定的特徵 new cls class capstr str def new cls,string 修改新類裡的new方法,需傳入乙個引數 string string.upper return str.new cls,string 用父類裡的new方法進行返回,直接飯後構造後的物件def...

python魔法方法

python魔術方法是特殊方法的暱稱。它是簡單而又強大,為了被python直譯器呼叫而存在的方法。python提供豐富的元物件協議,讓語言的使用者和核心開發者擁有並使用同樣的工具 例子引用 流暢的python 一摞python風格的紙牌 import collections namedtuple用來...