
python魔法方法詳解
據說,Python 的對象天生擁有一些神奇的方法,他們總被雙下劃線鎖包圍,他們是面向對象的python的一切.
他們是可以給你的類增加魔力的特殊方法,如果你的對象實作(重載)了這些方法的某一個,那麼這個方法就會在特殊的情況下被python調用.
你可以定義自己想要的行為,而這一切都是自動發生的.
python 的魔術方法非常強大,然而随之而來的則是責任,了解正确的方法去使用非常重要.
各魔法方法介紹如下:
a.基本魔法方法:1.__new__(cls[,...])
a.__new__是在一個對象執行個體化的時候所調用的第一個方法.
b.它的第一個參數是這個類,其他的參數是用來直接傳遞給__init__方法.
c.__new__決定是否使用該__init__方法,因為__new__可以調用其他類的構造方法或者直接傳回别的執行個體化對象來作為本類的執行個體,
如果__new__沒有傳回執行個體對象,則__init__不會被調用.
d.__new__主要是用于繼承一個不可變的類型,不如一個tuple或者string2.__init__(self[,...]) 構造器,當一個執行個體被建立的時候調用的初始化方法3.__del__(self) 析構器,當一個執行個體被銷毀的時候調用的方法4.__call__(self[,args...]) 允許一個類的執行個體像函數一樣被調用: x(a,b) 調用 x.__call__(a,b)5.__len__(self) 定義當被 len() 調用時的行為6.__repr__(self) 定義當被 repr() 調用時的行為7.__str__(self) 定義當被 str() 調用時的行為8.__bytes__(self) 定義當被 bytes() 調用時的行為9.__hash__(self) 定義當被 hash() 調用時的行為10.__bool__(self) 定義當被 bool() 調用時的行為,應該傳回的是True或者False11.__format__(self,format_spec) 定義當被 format() 調用時的行為
b.有關屬性*12.__getattr__(self,name) 定義當使用者試圖擷取一個不存在的屬性時*13.__getattribute__(self,name) 定義當該類的屬性被通路時的行為14.__setattr__(self,name,value) 定義當一個屬性被設定時的行為*15.__delattr__(self,name) 定義當一個屬性被删除時的行為16.__dir__(self,name) 定義當 dir() 被調用時的行為17.__get__(self,instance,owner) 定義當描述符的值被取得時的行為18.__set__(self,instance,value) 定義當描述符的值被改變時的行為19.__delete__(self,instance) 定義當描述符的值被删除時的行為
c.比較操作符20.__lt__(self,other) 定義小于号的行為: xy 調用 x.__gt__(y)25.__ge__(self,other) 定義大于等于号的行為: x>=y 調用 x.__ge__(y)
d.算法運算符26.__add__(self,other) 定義加法的行為: +
27.__sub__(self,other) 定義減法的算法: -
28.__mul__(self,other) 定義乘法的行為: *
29.__truediv__(self,other) 定義真除法的行為: /
30.__floordiv__(self,other) 定義整數除法(地闆除)的行為: //
31.__mod__(self,other) 定義取模算法的行為: %
32.__divmod__(self,other) 定義當被 divmod() 調用時的行為33.__pow__(self,other[,modulo]) 定義當被 power() 調用或**運算時的行為34.__lshift__(self,other) 定義按位左移的行為:<<
35.__rshift__(self,other) 定義按位右移的行為:>>
36.__add__(self,other) 定義按位與操作的行為:&
37.__xor__(self,other) 定義按位異或操作的行為:^
38.__or__(self,other) 定義按位或操作的行為:|e.反運算39.__radd__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用40.__rsub__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用41.__rmul__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用42.__rtruediv__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用43.__rfloordiv__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用44.__rmod__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用45.__rdivmod__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用46.__rpow__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用47.__rlshift__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用48.__rrshift__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用49.__rxor__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用50.__ror__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用
f.增量指派運算51.__iadd__(self, other) 定義指派加法的行為:+=
52.__isub__(self, other) 定義指派減法的行為:-=
53.__imul__(self, other) 定義指派乘法的行為:*=
54.__itruediv__(self, other) 定義指派真除法的行為:/=
55.__ifloordiv__(self, other) 定義指派整數除法的行為://=
56.__imod__(self, other) 定義指派取模算法的行為:%=
57.__ipow__(self, other[, modulo]) 定義指派幂運算的行為:**=
58.__ilshift__(self, other) 定義指派按位左移位的行為:<<=
59.__irshift__(self, other) 定義指派按位右移位的行為:>>=
60.__iand__(self, other) 定義指派按位與操作的行為:&=
61.__ixor__(self, other) 定義指派按位異或操作的行為:^=
62.__ior__(self, other) 定義指派按位或操作的行為:|=g。一進制操作符63._neg__(self) 定義正号的行為:+x64.__pos__(self) 定義負号的行為:-x65.__abs__(self) 定義當被 abs() 調用時的行為66.__invert__(self) 定義按位求反的行為:~x
h.類型轉換67.__complex__(self) 定義當被 complex() 調用時的行為(需要傳回恰當的值)68.__int__(self) 定義當被 int() 調用時的行為(需要傳回恰當的值)69.__float__(self) 定義當被 float() 調用時的行為(需要傳回恰當的值)70.__round__(self[, n]) 定義當被 round() 調用時的行為(需要傳回恰當的值)71.__index__(self) 1. 當對象是被應用在切片表達式中時,實作整形強制轉換2. 如果你定義了一個可能在切片時用到的定制的數值型,你應該定義 __index__
3. 如果 __index__ 被定義,則 __int__也需要被定義,且傳回相同的值
i.上下文管理(with 語句)72.__enter__(self) 1. 定義當使用 with 語句時的初始化行為2. __enter__的傳回值被 with 語句的目标或者 as 後的名字綁定73.__exit__(self, exc_type, exc_value, traceback)1. 定義當一個代碼塊被執行或者終止後上下文管理器應該做什麼2. 一般被用來處理異常,清除工作或者做一些代碼塊執行完畢之後的日常工作
j.容器類型74.__len__(self) 定義當被 len() 調用時的行為(傳回容器中元素的個數)75.__getitem__(self, key) 定義擷取容器中指定元素的行為,相當于 self[key]76.__setitem__(self, key, value) 定義設定容器中指定元素的行為,相當于 self[key] =value77.__delitem__(self, key) 定義删除容器中指定元素的行為,相當于 delself[key]78.__iter__(self) 定義當疊代容器中的元素的行為79.__reversed__(self) 定義當被 reversed() 調用時的行為80.__contains__(self, item) 定義當使用成員測試運算符(in 或 not in)時的行為
View Code
python魔法方法詳解
據說,Python 的對象天生擁有一些神奇的方法,他們總被雙下劃線鎖包圍,他們是面向對象的python的一切.
他們是可以給你的類增加魔力的特殊方法,如果你的對象實作(重載)了這些方法的某一個,那麼這個方法就會在特殊的情況下被python調用.
你可以定義自己想要的行為,而這一切都是自動發生的.
python 的魔術方法非常強大,然而随之而來的則是責任,了解正确的方法去使用非常重要.
各魔法方法介紹如下:
a.基本魔法方法:
1.__new__(cls[,...])
a.__new__ 是在一個對象執行個體化的時候所調用的第一個方法.
b.它的第一個參數是這個類,其他的參數是用來直接傳遞給__init__方法.
c.__new__ 決定是否使用該__init__方法,因為__new__可以調用其他類的構造方法或者直接傳回别的執行個體化對象來作為本類的執行個體,
如果__new__沒有傳回執行個體對象,則__init__不會被調用.
d.__new__ 主要是用于繼承一個不可變的類型,不如一個tuple或者string
2.__init__(self[,...]) 構造器,當一個執行個體被建立的時候調用的初始化方法
3.__del__(self) 析構器,當一個執行個體被銷毀的時候調用的方法
4.__call__(self[,args...]) 允許一個類的執行個體像函數一樣被調用: x(a,b) 調用 x.__call__(a,b)
5.__len__(self) 定義當被 len() 調用時的行為
6.__repr__(self) 定義當被 repr() 調用時的行為
7.__str__(self) 定義當被 str() 調用時的行為
8.__bytes__(self) 定義當被 bytes() 調用時的行為
9.__hash__(self) 定義當被 hash() 調用時的行為
10.__bool__(self) 定義當被 bool() 調用時的行為,應該傳回的是True或者False
11.__format__(self,format_spec) 定義當被 format() 調用時的行為
b.有關屬性
*12.__getattr__(self,name) 定義當使用者試圖擷取一個不存在的屬性時
*13.__getattribute__(self,name) 定義當該類的屬性被通路時的行為
14.__setattr__(self,name,value) 定義當一個屬性被設定時的行為
*15.__delattr__(self,name) 定義當一個屬性被删除時的行為
16.__dir__(self,name) 定義當 dir() 被調用時的行為
17.__get__(self,instance,owner) 定義當描述符的值被取得時的行為
18.__set__(self,instance,value) 定義當描述符的值被改變時的行為
19.__delete__(self,instance) 定義當描述符的值被删除時的行為
c.比較操作符
20.__lt__(self,other) 定義小于号的行為: x
21.__le__(self,other) 定義小于等于号的行為: x<=y 調用 x.__le__(y)
22.__eq__(self,other) 定義等于号的行為: x==y 調用 x.__eq__(y)
23.__ne__(self,other) 定義不等号的行為: x!=y 調用 x.__ne__(y)
24.__gt__(self,other) 定義大于号的行為: x>y 調用 x.__gt__(y)
25.__ge__(self,other) 定義大于等于号的行為: x>=y 調用 x.__ge__(y)
d.算法運算符
26.__add__(self,other) 定義加法的行為: +
27.__sub__(self,other) 定義減法的算法: -
28.__mul__(self,other) 定義乘法的行為: *
29.__truediv__(self,other) 定義真除法的行為: /
30.__floordiv__(self,other) 定義整數除法(地闆除)的行為: //
31.__mod__(self,other) 定義取模算法的行為: %
32.__divmod__(self,other) 定義當被 divmod() 調用時的行為
33.__pow__(self,other[,modulo]) 定義當被 power() 調用或**運算時的行為
34.__lshift__(self,other) 定義按位左移的行為:<<
35.__rshift__(self,other) 定義按位右移的行為:>>
36.__add__(self,other) 定義按位與操作的行為:&
37.__xor__(self,other) 定義按位異或操作的行為:^
38.__or__(self,other) 定義按位或操作的行為:|
e.反運算
39.__radd__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用
40.__rsub__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用
41.__rmul__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用
42.__rtruediv__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用
43.__rfloordiv__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用
44.__rmod__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用
45.__rdivmod__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用
46.__rpow__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用
47.__rlshift__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用
48.__rrshift__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用
49.__rxor__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用
50.__ror__(self,other) 與上方相同,當左操作數不支援相應的操作時被調用
f.增量指派運算
51.__iadd__(self, other)定義指派加法的行為:+=
52.__isub__(self, other)定義指派減法的行為:-=
53.__imul__(self, other)定義指派乘法的行為:*=
54.__itruediv__(self, other)定義指派真除法的行為:/=
55.__ifloordiv__(self, other)定義指派整數除法的行為://=
56.__imod__(self, other)定義指派取模算法的行為:%=
57.__ipow__(self, other[, modulo])定義指派幂運算的行為:**=
58.__ilshift__(self, other)定義指派按位左移位的行為:<<=
59.__irshift__(self, other)定義指派按位右移位的行為:>>=
60.__iand__(self, other)定義指派按位與操作的行為:&=
61.__ixor__(self, other)定義指派按位異或操作的行為:^=
62.__ior__(self, other)定義指派按位或操作的行為:|=
g。一進制操作符
63._neg__(self)定義正号的行為:+x
64.__pos__(self)定義負号的行為:-x
65.__abs__(self)定義當被 abs() 調用時的行為
66.__invert__(self)定義按位求反的行為:~x
h.類型轉換
67.__complex__(self)定義當被 complex() 調用時的行為(需要傳回恰當的值)
68.__int__(self)定義當被 int() 調用時的行為(需要傳回恰當的值)
69.__float__(self)定義當被 float() 調用時的行為(需要傳回恰當的值)
70.__round__(self[, n])定義當被 round() 調用時的行為(需要傳回恰當的值)
71.__index__(self)1. 當對象是被應用在切片表達式中時,實作整形強制轉換
2. 如果你定義了一個可能在切片時用到的定制的數值型,你應該定義 __index__
3. 如果 __index__ 被定義,則 __int__ 也需要被定義,且傳回相同的值
i.上下文管理(with 語句)
72.__enter__(self)1. 定義當使用 with 語句時的初始化行為
2. __enter__ 的傳回值被 with 語句的目标或者 as 後的名字綁定
73.__exit__(self, exc_type, exc_value, traceback)
1. 定義當一個代碼塊被執行或者終止後上下文管理器應該做什麼
2. 一般被用來處理異常,清除工作或者做一些代碼塊執行完畢之後的日常工作
j.容器類型
74.__len__(self)定義當被 len() 調用時的行為(傳回容器中元素的個數)
75.__getitem__(self, key)定義擷取容器中指定元素的行為,相當于 self[key]
76.__setitem__(self, key, value)定義設定容器中指定元素的行為,相當于 self[key] = value
77.__delitem__(self, key)定義删除容器中指定元素的行為,相當于 del self[key]
78.__iter__(self)定義當疊代容器中的元素的行為
79.__reversed__(self)定義當被 reversed() 調用時的行為
80.__contains__(self, item)定義當使用成員測試運算符(in 或 not in)時的行為