聽說,Python 的對象天生擁有一些神奇的方法,它們總被雙下劃線所包圍,他們是面向對象的 Python 的一切。
他們是能夠給你的類增長魔力的特殊方法,若是你的對象實現(重載)了這些方法中的某一個,那麼這個方法就會在特殊的狀況下被 Python 所調用,你能夠定義本身想要的行爲,而這一切都是自動發生的。
Python 的魔術方法很是強大,然而隨之而來的則是責任。瞭解正確的方法去使用很是重要!
C.__init__(self[, arg1, ...]) 構造器(帶一些可選的參數)
C.__new__(self[, arg1, ...]) 構造器(帶一些可選的參數)一般用在設置不變數據類型的子類。
C.__del__(self) 析構器
C.__str__(self) 可打印的字符輸出;內建str()及print 語句
C.__repr__(self) 運行時的字符串輸出 內建repr() 和‘‘ 操做符
C.__unicode__(self) Unicode 字符串輸出;內建unicode()
C.__call__(self, *args) 表示可調用的實例
C.__nonzero__(self) 爲object 定義False 值 內建bool() (從2.2 版開始)
C.__len__(self) 「長度」(可用於類) 內建len()
C.__cmp__(self, obj) 對象比較;內建cmp()
C.__lt__(self, obj) 小於/小於或等於 對應<及<=操做符
C.__gt__(self, obj) 大於/大於或等於 對應>及>=操做符
C.__eq__(self, obj) 等於/不等於 對應==,!=及<>操做符
C.__getattr__(self, attr) 獲取屬性 內建getattr() 僅當屬性沒有找到時調用
C.__setattr__(self, attr, val) 設置屬性
C.__delattr__(self, attr) 刪除屬性
C.__getattribute__(self, attr) a 獲取屬性;內建getattr() 老是被調用
C.__get__(self, attr) a (描述符)獲取屬性
C.__set__(self, attr, val) a (描述符)設置屬性
C.__delete__(self, attr) a (描述符)刪除屬性
C.__*add__(self, obj) 加;+操做符
C.__*sub__(self, obj) 減;-操做符
C.__*mul__(self, obj) 乘;*操做符
C.__*div__(self, obj) 除;/操做符
C.__*truediv__(self, obj) e True 除;/操做符
C.__*floordiv__(self, obj) e Floor 除;//操做符
C.__*mod__(self, obj) 取模/取餘;%操做符
C.__*divmod__(self, obj) 除和取模;內建divmod()
C.__*pow__(self, obj[, mod]) 乘冪;內建pow();**操做符
C.__*lshift__(self, obj) 左移位;<<操做符
C.__*rshift__(self, obj) 右移;>>操做符
C.__*and__(self, obj) 按位與;&操做符
C.__*or__(self, obj) 按位或;|操做符
C.__*xor__(self, obj) 按位與或;^操做符
C.__neg__(self) 一元負
C.__pos__(self) 一元正
C.__abs__(self) 絕對值;內建abs()
C.__invert__(self) 按位求反;~操做符
C.__complex__(self, com) 轉爲complex(複數);內建complex()
C.__int__(self) 轉爲int;內建int()
C.__long__(self) 轉爲long;內建long()
C.__float__(self) 轉爲float;內建float()
C.__oct__(self) 八進制表示;內建oct()
C.__hex__(self) 十六進制表示;內建hex()
C.__coerce__(self, num) 壓縮成一樣的數值類型;內建coerce()
C.__index__(self)g 在有必要時,壓縮可選的數值類型爲整型(好比:用於切片
C.__len__(self) 序列中項的數目
C.__getitem__(self, ind) 獲得單個序列元素
C.__setitem__(self, ind,val) 設置單個序列元素
C.__delitem__(self, ind) 刪除單個序列元素
C.__getslice__(self, ind1,ind2) 獲得序列片段
C.__setslice__(self, i1, i2,val) 設置序列片段
C.__delslice__(self, ind1,ind2) 刪除序列片段
C.__contains__(self, val) f 測試序列成員;內建in 關鍵字
C.__*add__(self,obj) 串連;+操做符
C.__*mul__(self,obj) 重複;*操做符
C.__iter__(self) e 建立迭代類;內建iter()
C.__len__(self) mapping 中的項的數目
C.__hash__(self) 散列(hash)函數值
C.__getitem__(self,key) 獲得給定鍵(key)的值
C.__setitem__(self,key,val) 設置給定鍵(key)的值
C.__delitem__(self,key) 刪除給定鍵(key)的值
C.__missing__(self,key) 給定鍵若是不存在字典中,則提供一個默認值