python中__setattr__, __getattr__, __delattr__, __call__

Python中有一個(gè)有趣的語法,只要定義類型的時(shí)候,實(shí)現(xiàn)call函數(shù),這個(gè)類型就成為可調(diào)用的。
換句話說,我們可以把這個(gè)類的對(duì)象當(dāng)作函數(shù)來使用,相當(dāng)于重載了括號(hào)運(yùn)算符。setattr, getattr, delattr為操作對(duì)象屬性的調(diào)用

class storage(dict):
#通過使用__setattr__, __getattr__, __delattr__
#可以重寫dict,使之通過“.”調(diào)用
    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__方法用于實(shí)例自身的調(diào)用
    #達(dá)到()調(diào)用的效果
    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默認(rèn)行為
print s.name#這是__getattr__起的作用
del s.name#這是__delattr__起的作用
print s("name")
print s["name"]
print s.name 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、什么叫魔法方法? 魔法方法:Python解釋器自動(dòng)給出默認(rèn)的,是可以給你的類增加魔力的特殊方法。如果你的對(duì)象實(shí)...
    Bling_ll閱讀 1,168評(píng)論 0 2
  • 前言 人生苦多,快來 Kotlin ,快速學(xué)習(xí)Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,703評(píng)論 9 118
  • 前言 先扯一點(diǎn)背景知識(shí) PEP8(Python Enhancement Proposal)是一份python的編碼...
    Stansosleepy閱讀 2,043評(píng)論 0 5
  • 田寶點(diǎn)評(píng)大家的共性問題: 第一個(gè)問題沒有重點(diǎn)語句加粗; 第二是部分學(xué)員沒有良好的分段意識(shí),影響了閱讀效果,再好的文...
    小韓96閱讀 423評(píng)論 2 11
  • 之前聽過一句話,說女人的美,30歲之前靠父母,30歲之后靠自己。 對(duì)于這句話,我是越來越相信的。 身邊很多這樣的實(shí)...
    二姐說育兒先育己閱讀 324評(píng)論 0 0

友情鏈接更多精彩內(nèi)容