__init__函數
當一個類實例被創建時, __init__() 方法會自動執行,在類實例創建完畢后執行,類似構建函數。__init__() 可以被當成構建函數,不過不象其它語言中的構建函數,它並不創建實例--它僅僅是你的對象創建后執行的第一個方法。它的目的是執行一些該對象的必要的初始 化工作。通過創建自己的 __init__() 方法,你可以覆蓋默認的 __init__()方法(默認的方法什么也不做),從而能夠修飾剛剛創建的對象__init__()需要一個默認的參數self,相當於this。
__call函數
Python中有一個有趣的語法,只要定義類型的時候,實現__call__函數,這個類型就成為可調用的。
換句話說,我們可以把這個類的對象當作函數來使用,相當於重載了括號運算符。為了弄明白python中__setattr__, __getattr__, __delattr__, __call__的作用,重寫dict,擴展其功能。
class storage(dict): #通過使用__setattr__, __getattr__, __delattr__ #可以重寫dict,使之通過“.”調用 def __setattr__(self, key, value): self[key] = value def __getattr__ (self, key): try: return self[key] except KeyError, k: return None def __delattr__ (self, key): try: del self[key] except KeyError, k: return None # __call__方法用於實例自身的調用 #達到()調用的效果 def __call__ (self, key): try: return self[key] except KeyError, k: return None s = storage() s.name = "hello"#這是__setattr__起的作用 print s("name")#這是__call__起的作用 print s["name"]#dict默認行為 print s.name#這是__getattr__起的作用 del s.name#這是__delattr__起的作用 print s("name") print s["name"] print s.name