python中雙下劃線開頭得函式和變數

G8bao7發表於2014-08-29
FROM:http://blog.csdn.net/largetalk/article/details/6990191

python中以雙下劃線的是一些系統定義得名稱,讓python以更優雅得語法實行一些操作,本質上還是一些函式和變數,與其他函式和變數無二。

比如x.__add__(y) 等價於 x+y
有一些很常見,有一些可能比較偏,在這裡羅列一下,做個筆記,備忘。
x.__contains__(y) 等價於 y in x, 在list,str, dict,set等容器中有這個函式
__base__, __bases__, __mro__, 關於類繼承和函式查詢路徑的。
class.__subclasses__(), 返回子類列表
x.__call__(...) == x(...)
x.__cmp__(y) == cmp(x,y)
x.__getattribute__('name') == x.name == getattr(x, 'name'),  比__getattr__更早呼叫
x.__hash__() == hash(x)
x.__sizeof__(), x在記憶體中的位元組數, x為class得話, 就應該是x.__basicsize__
x.__delattr__('name') == del x.name
__dictoffset__ attribute tells you the offset to where you find the pointer to the __dict__ object in any instance object that has one. It is in bytes.
__flags__, 返回一串數字,用來判斷該型別能否被序列化(if it's a heap type), __flags__ & 512
S.__format__, 有些類有用
x.__getitem__(y) == x[y], 相應還有__setitem__, 某些不可修改型別如set,str沒有__setitem__
x.__getslice__(i, j) == x[i:j], 有個疑問,x='123456789', x[::2],是咋實現得
__subclasscheck__(), check if a class is subclass
__instancecheck__(), check if an object is an instance
__itemsize__, These fields allow calculating the size in bytes of instances of the type. 0是可變長度, 非0則是固定長度
x.__mod__(y) == x%y, x.__rmod__(y) == y%x
x.__module__ , x所屬模組
x.__mul__(y) == x*y,  x.__rmul__(y) == y*x

__reduce__, __reduce_ex__ , for pickle

__slots__ 使用之後類變成靜態一樣,沒有了__dict__, 例項也不可新新增屬性

__getattr__ 在一般的查詢屬性查詢不到之後會呼叫此函式

__setattr__ 取代一般的賦值操作,如果有此函式會呼叫此函式, 如想呼叫正常賦值途徑用 object.__setattr__(self, name, value)

__delattr__ 同__setattr__, 在del obj.name有意義時會呼叫

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26250550/viewspace-1260151/,如需轉載,請註明出處,否則將追究法律責任。

相關文章