Python-__getattr__與__getattribute__

getattr()

解釋說明

定義了__getattr__(),當訪問object不存在的屬性時會調用該方法

不定義訪問不存在的屬性時會報 AttributeError

class User:
    def __init__(self,info={}):
        self.info = info
if __name__ == "__main__":
    user = User(info={"company_name":"imooc", "name":"bobby"})
    print(user.test)

結果:
AttributeError: 'User' object has no attribute 'test'

當我們使用了這個方法,則不會報錯

class User:
    def __init__(self,info={}):
        self.info = info

    def __getattr__(self, item):
        return self.info[item]


if __name__ == "__main__":
    user = User(info={"company_name":"aaaa", "name":"bbbb"})
    print(user.name)

getattribute()

解釋說明

__getattribute_是屬性訪問攔截器,就是當這個類的屬性被訪問時,會自動調用類的__getattribute__方法

使用案例

當我們訪問已有屬性

class User:
    def __init__(self,info={}):
        self.info = info

    def __getattribute__(self, item):
        return "ccc"

if __name__ == "__main__":
    user = User(info={"company_name":"aaa", "name":"bbb"})
    print(user.name)

當訪問未知屬性

class User:
    def __init__(self,info={}):
        self.info = info

    def __getattribute__(self, item):
        return "cccc"

if __name__ == "__main__":
    user = User(info={"company_name":"aaa", "name":"bbb"})
    print(user.test)

最後都會打印ccc

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章