def __init__(self, name, info):
self.name = name
self.info = info
ls = user("李四",)print(ls.info)執行結果:
如果想獲得male屬性,則需要用到__getattr__魔法方法。class user(object):
def __init__(self, name, info):
self.name = name
self.info = info def __getattr__(self, item):
return self.info[item]ls = user("李四",)print(ls.gender)執行結果:
male屬性描述符是乙個強大的通用協議。它是properties, methods, static methods, class methods
和super()的呼叫原理。
屬性描述符是實現了特定協議的類,只要實現了__get__,__set__和__delete__三個方法中的任意乙個,這個類就是描述符,它能實現對多個屬性運用相同訪問邏輯的一種方式,通俗來說就是:建立乙個例項,作為另乙個類的類屬性。
如果乙個物件同時定義了__get__和__set__方法,它被稱做資料描述符(data descriptor)。
只定義__get__方法的物件則被稱為非資料描述符(non-data descriptor)。
使用類方法建立描述符 • 定義乙個intfield類為描述符類 • 建立intfield類的例項,作為另乙個user類的屬性class user:
def __init__(self, age):
self.age = age def get_age(self):
return (str(self.age) + '歲')
def set_age(self, age):
if not isinstance(age, int):
raise typeerror('type error')
self.age = age
tt=user(55)tt.set_age(60)print(tt.get_age())執行結果:60歲描述符查詢順序 • 當為資料描述符時, get__優先順序高於__dict •
當為非資料描述符時,dict__優先順序高於__get
python 描述 python描述符
在python中,訪問乙個屬性的優先順序順序按照如下順序 1.類屬性2.資料描述符3.例項屬性4.非資料描述符5.getattr 方法。描述符,用一句話來說,就是將某種特殊型別的類的例項指派給另乙個類的屬性 注意 這裡是類屬性,而不是物件屬性 而這種特殊型別的類就是實現了 get set delet...
python描述器 python描述器
首先介紹一下裝飾器,所謂裝飾器,就是接受乙個函式作為引數,然後返回乙個函式的函式。所謂帶引數的裝飾器呢?其實是返回裝飾器的函式。注意啦!python的裝飾器語法是乙個語法糖,實際上並不強制要求你的裝飾器返回函式!你的裝飾器完全返回隨便什麼東西!int float bool str等基本型別,list...
python類屬性描述 描述Python類屬性
ls user 李四 print ls.info 執行結果 如果想獲得male屬性,則需要用到 getattr 魔法方法。class user object def init self,name,info self.name name self.info info def getattr self,...