python 魔術方法
常用魔術方法
魔術方法就是一個類的特殊方法,和普通方法唯一的不同時,普通方法需要調用!而魔術方法由系統自動調用。
1.__init__
初始化魔術方法 觸發時機:初始化對象時觸發(不是實例化觸發,但是和實例化在一個操作中) p1 = Person() p1對象 ? 實例化對象p1 ? p1 實例 參數:至少有一個self,接收對象 返回值:無 作用:初始化對象的成員
2.__new__
實例化魔術方法 類方法 觸發時機: 在實例化對象時觸發 參數:至少一個cls 接收當前類 返回值:必須返回一個對象實例 作用:實例化對象 注意:實例化對象是Object類底層實現,其他類繼承了Object的__new__才能夠實現實例化對象。 沒事別碰這個魔術方法,先觸發__new__才會觸發__init__
3.__del__
析構魔術方法 觸發時機:當對象沒有用(沒有任何變量引用)的時候被觸發 參數:一個self 返回值:無 作用:在銷毀對象時回收資源 注意:del不一定會觸發當前方法,只有當前對象沒有任何變量引用時才會觸發
4.__call__
調用對象的魔術方法 觸發時機:將對象當作函數調用時觸發,方式: 對象() 參數:至少一個self接收對象,其余根據調用時參數決定 返回值:根據情況而定 作用:可以將復雜的步驟進行合并操作,減少調用的步驟,方便使用 注意:無
5.__len__
觸發時機:使用len(對象) 的時候觸發 參數:一個參數self 返回值:必須是一個整型 作用:可以設置為檢測對象成員個數,但是也可以進行其他任意操作 注意:返回值必須必須是整數,否則語法報錯,另外該要求是格式要求。
6.__str__
觸發時機:使用print(對象)或者str(對象)的時候觸發 參數:一個self接收對象 返回值:必須是字符串類型 作用:print(對象時)進行操作,得到字符串,通常用于快捷操作 注意:無
7.__repr__
觸發時機:在使用repr(對象)的時候觸發 參數:一個self接收對象 返回值:必須是字符串 作用:將對象轉使用repr化為字符串時使用,也可以用于快捷操作
8.__bool__
觸發時機: 使用bool(對象)的時候觸發 參數:一個self接收對象 返回值:必須是布爾值 作用:根據實際情況決定,可以作為快捷方式使用 注意:僅適合于返回布爾值的操作
9.__format__
觸發時機:使用字符串.format(對象)時候觸發 參數:一個self接收對象,一個參數接收format的{}中的格式,例如:>5 返回值:必須是字符串 作用:設置對象可以作為format的參數,并且自定義對象格式化的規則 注意:無
描述符相關的魔術方法
1.__get__
觸發時機:在獲取指定描述符操作的成員屬性的值的時候觸發 參數:1描述符對象本身,2描述符描述的屬性所在的對象,描述符描述的對象的類 返回值:必須有,不然無法獲取相應屬性值 注意:僅在描述符中使用
2.__set__
觸發時機:在設置或者添加指定描述符操作的成員屬性的時候觸發 參數:1描述符對象本身,2描述符描述的屬性所在的對象,3要設置的值 返回值:無 注意:僅在描述符中使用
3.__delete__
觸發時機:在刪除指定描述符操作的成員屬性的時候觸發 參數:1描述符對象本身,2描述符描述的屬性所在的對象 返回值:無 注意:僅在描述符中使用
與屬性操作相關的魔術方法
1.__getattr__
觸發時機:獲取不存在的對象成員時觸發 參數:一個是接收當前對象的self,一個是獲取成員名稱的字符串 返回值:必須有值 作用:為訪問不存在的屬性設置值 注意:getattribute無論何時都會在getattr之前觸發,觸發了getattribute就不會在觸發getattr了
2.__setattr__
觸發時機:設置對象成員值的時候觸發 參數:1個當前對象的self,一個是要設置的成員名稱字符串,一個是要設置的值 返回值:無 過程操作 作用:接管設置操作,可以在設置前之前進行判斷驗證等行為 注意:在當前方法中無法使用成員=值的方式直接設置成員,否則會無限遞歸,必須借助object的設置方法來完成 ? object.__setattr__(參數1,參數2,參數3)
3.__delattr__
觸發時機:刪除對象成員時觸發 參數:一個當前對象的self 返回值:無 作用:可以在刪除成員時進行驗證。
4.__getattribute__
觸發時機:使用對象成員時觸發,無論成員是否存在 參數:1個接收當前對象self,一個是獲取的成員的名稱字符串 返回值:必須有 作用:在具有封裝操作(私有化時),為程序開部分訪問權限使用
5.__dir__
觸發時機:dir(對象)的時候觸發 參數:1個接收當前對象self 返回值:必須為序列類型(列表,元組,集合等,) 作用:可以自定義成員列表的返回值
運算相關魔術方法
比較運算相關魔術方法
1.__lt__
格式:def __lt__(self,other):return 數據 特征:觸發時機:進行小于判斷時自動觸發參數:2個參數第一個是self,第二個判斷的第二個對象返回值:返回值可以任意類型,推薦布爾值作用:定義小于號的行為:x < y 調用 x.lt(y)
2.__le__
格式:def __le__(self):return bool特征:觸發時機:進行小于等于判斷時自動觸發參數:2個參數第一個是self,第二個判斷的第二個對象返回值:返回值可以任意類型,推薦布爾值作用:定義小于等于號的行為:x <= y 調用 x.le(y)
3.__gt__
格式:def __gt__(self):return bool特征:觸發時機:進行大于判斷時自動觸發參數:2個參數第一個是self,第二個判斷的第二個對象返回值:返回值可以任意類型,推薦布爾值作用:定義大于號的行為:x > y 調用 x.gt(y)
4.__ge__
格式:def __ge__(self):return bool特征:觸發時機:進行大于等于判斷時自動觸發參數:2個參數第一個是self,第二個判斷的第二個對象返回值:返回值可以任意類型,推薦布爾值作用:定義大于等于號的行為:x >= y 調用 x.ge(y)
5.__eq__
格式:def __eq__(self):return bool特征:觸發時機:進行等于判斷時自動觸發參數:2個參數第一個是self,第二個判斷的第二個對象返回值:返回值可以任意類型,推薦布爾值作用:定義大于等于號的行為:x == y 調用 x.eq(y)
6.__ne__
格式:def __ne__(self):return bool特征:觸發時機:進行不等于判斷時自動觸發參數:2個參數第一個是self,第二個判斷的第二個對象返回值:返回值可以任意類型,推薦布爾值作用:定義不等號的行為:x != y 調用 x.ne(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) 與上方相同,當左操作數不支持相應的操作時被調用 __rand__(self, other) 與上方相同,當左操作數不支持相應的操作時被調用 __rxor__(self, other) 與上方相同,當左操作數不支持相應的操作時被調用 __ror__(self, other) 與上方相同,當左操作數不支持相應的操作時被調用
賦值運算相關魔術方法
__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) 定義賦值按位或操作的行為:|=
一元運算相關魔術方法
__pos__(self) 定義正號的行為:+x __neg__(self) 定義負號的行為:-x __abs__(self) 定義當被 abs() 調用時的行為 __invert__(self) 定義按位求反的行為:~x
類型轉換相關魔術方法
__complex__(self) 定義當被 complex() 調用時的行為(需要返回恰當的值) __int__(self) 定義當被 int() 調用時的行為(需要返回恰當的值) __float__(self) 定義當被 float() 調用時的行為(需要返回恰當的值) __round__(self[, n]) 定義當被 round() 調用時的行為(需要返回恰當的值) __index(self)__ 1. 當對象是被應用在切片表達式中時,實現整形強制轉換2. 如果你定義了一個可能在切片時用到的定制的數值型,你應該定義 index3. 如果 index 被定義,則 int 也需要被定義,且返回相同的值
上下文管理相關魔術方法(with)
__enter__
和 __exit__
__enter__(self)1. 定義當使用 with 語句時的初始化行為2. enter 的返回值被 with 語句的目標或者 as 后的名字綁定__exit__(self, exctype, excvalue, traceback)1. 定義當一個代碼塊被執行或者終止后上下文管理器應該做什么2. 一般被用來處理異常,清除工作或者做一些代碼塊執行完畢之后的日常工作
容器類型相關魔術方法
__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)時的行為