Python: 內置私有方法

################## __new__ ##################
@staticmethod
__new__(cls [, ...])
類的構造器,建立某個類的實例,返回值應該是cls 的實例。 它執行在 cls的 __init__ 以前。
若是__new__不返回cls一個實例,將不會再執行 cls 的 __init__java


################## __init__ ##################
__init___(self [, ...])
類的構造器ide


################## __del__ ##################
__init___(self [, ...])
類的析構函數,當使用del obj 時,或者GC時,會調用該析構函數函數

################## __repr__ ##################
__repr___(self [, ...])
返回一個字符串,當調用內置函數 repr(obj)時,會調用obj.__repr__測試

################## __str__ ##################
__repr___(self [, ...])
返回一個字符串,相似於java中的toString()。當調用內置函數 str(obj)或者print(obj)時,會調用obj.__str__編碼

################## 比較操做符 (>,<,>=,<=,!=,==)##################
兩個對象使用 比較運算符(>,<,>=,<=,!=,==)比較時,執行過程是這樣的。
1)優先使用 "rich comparison",即:
__lt__(self, other),
__le__(self, other),
__eq__(self, other),
__ne__(self, other),
__gt__(self, other),
__ge__(self, other),code

2)若是未找到對應的 "rich comparison",則使用 __cmp__:
__cmp__(self, other)
在使用__cmp__時, 若是 self < other ,返回負整數,若是 self == other 返回 0,若是 self > other 返回正整數對象

3)若是__cmp__也沒有找到,則使用object identity (「address」) 進行比較。unicode


################## __hash__ ##################
__hash__(self)
當使用內置函數 hash(object)時,或者在一個 基於hash的集合上(如 set, frozenset, dict)操做時會調用object.__hash__
該函數返回一個整數。
1)若是一個class沒有定義 __cmp__或者__eq__,就不該該去定義 __hash__,
2)若是定義了__cmp__或者__eq__,可是沒有定義__hash__,那麼該類的實例就不能用在基於hash的集合中,仍然能夠用於線性集合中。字符串

################## 真值判斷(bool(obj)) ##################
當須要進行真值測試(如使用內置函數 bool(obj)),或者在if 表達式中時,調用流程是這樣的:
1)使用__nonzero__來判斷真值:
__nonzero__(self)
當須要進行真值測試(如使用內置函數 bool(obj))時,會調用它。返回值是True | False,或者 0 | 1get

2)若是沒有定義__nonzero__,則會使用__len__:
__len__(self)
該函數,還會在使用內置函數 len(obj)時調用。
若是是 bool(obj)引發了__len__的調用,則根據__len__的返回值是否爲0來判斷真值


################## __unicode__ ##################
__unicode__(self)
返回一個 Unicode對象,會在使用 內置函數 unicode(obj)時調用。若是未定義該函數,則會採用系統默認的編碼轉換爲字符串。
而後再轉爲Unicode。

################## 像容器同樣操做對象 ##################
__len__(self)
當使用內置函數len(),bool()會調用它。

__getitem__(self, key)
__setitem__(self, key)
__delitem__(self, key)
當使用 object[key]時會調用__getitem__,當使用object[key]=value時,會調用__setitem__

__iter__(self):
該方法能夠在for ... in ... 或者 if in 或者 if not in中調用,
該函數應該返回一個 iterator對象(一個有__next__(self)的對象)

__reversed__(self):
當使用內置函數 reversed()時,會調用該函數。做用是反向迭代。
該函數應該返回一個反向的iterator對象

############### if in 或者 if not in ##################
在使用 if in 或者 if not in操做時,執行順序是:
1)使用__contains__來判斷
__contains__(self, item):
返回True若是對象中包含item
2)若是對象中沒有定義__contains__,則做爲一個經過迭代的的方式來判斷
使用__iter__(self) 返回一個iterator,
而後使用__next__迭代,迭代過程當中使用 item==other 方式來判斷
3)若是上述兩種都沒有,則經過__getitem__方式判斷


###############比較對象ID( is 或者 is not) #############
is 比較對象 ID,== 比較對象值
能夠將 Python 中 is 理解爲與Java中的==,Python中 ==理解爲java中的equals

############### for in 遍歷 #########################1)使用 __iter__ 返回一個iterator對象,而後調用其 __next__2)若是未指定__iter__,可是有 __getitem__(self),則結合 object.__len__ 屬性和 object.__getitem__(self)來遍歷

相關文章
相關標籤/搜索