python 描述 python描述符

2021-10-11 02:19:00 字數 1178 閱讀 2618

在python中,訪問乙個屬性的優先順序順序按照如下順序:1.類屬性2.資料描述符3.例項屬性4.非資料描述符5.__getattr__()方法。

描述符,用一句話來說,就是將某種特殊型別的類的例項指派給另乙個類的屬性(注意:這裡是類屬性,而不是物件屬性)。而這種特殊型別的類就是實現了__get__,__set__,__delete__的新式類(即繼承object)。

闡述下這三個方法:

__get__的標準定義是__get__(self,obj,type=none),第乙個函式是呼叫它的例項,obj是指去訪問屬性所在的方法,最後乙個type是乙個可選引數,通常為none(這個有待於進一步的研究)

例如給定類x和例項x,呼叫x.foo,等效於呼叫:type(x).__dict__["foo"].__get__(x,type(x))

呼叫x.foo,等效於呼叫:

x.__dict__['foo'].__get__(none, x)

如果super()被呼叫了,比如,給定y 為x 的子類,然後用super(y,obj).foo呼叫,等效於呼叫:x.__dict__['foo'].__get__(obj, x)

看下面一段**:class descriptor(object):

def __get__(self,object,type):

print 'get',self,object,type

def __set__(self,object,value):

print 'set',self,object,value

class demo(object):

desc= descriptor()

demo=demo()

demo.desc # get <__main__.descriptor object at> <__main__.demo object at>

demo.desc='my descriptor' #set <__main__.descriptor object at> <__main__.demo object at> my descriptor

其中descriptor就是乙個描述符類,只要實現了__get__等三種方法中乙個或幾個都是描述符類。

描述符有資料描述符和非資料描述符:

資料描述符:同時實現了__get__和__set__方法的描述符;

非資料描述符:沒有實現__set__方法的描述符;

python描述符很難 Python中的描述符

解答三個問題,描述是什麼?如何實現?使用場景?一 什麼是描述符 描述符就是乙個具有繫結行為的物件屬性,其屬性訪問將由描述符協議中的方法覆蓋。這些方法為 get set 和 delete 如果這些方法中的任何乙個針對某個物件定義,那麼它就被認為是乙個描述符。get 用於訪問屬性。它返回屬性的值,或者在...

python描述器 python描述器

首先介紹一下裝飾器,所謂裝飾器,就是接受乙個函式作為引數,然後返回乙個函式的函式。所謂帶引數的裝飾器呢?其實是返回裝飾器的函式。注意啦!python的裝飾器語法是乙個語法糖,實際上並不強制要求你的裝飾器返回函式!你的裝飾器完全返回隨便什麼東西!int float bool str等基本型別,list...

python 描述 描述Python類屬性

def init self,name,info self.name name self.info info ls user 李四 print ls.info 執行結果 如果想獲得male屬性,則需要用到 getattr 魔法方法。class user object def init self,nam...