Python中的__init__,__call__


__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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM