深入理解 Python描述符的使用

2021-10-02 10:25:07 字數 1840 閱讀 1885

什麼是描述符

描述符就是乙個新式類,我們可以使用描述符去實現一些新的類或者例項,在這個類裡邊至少要實現__get__()__set__(),__delete__()中的乙個,它還分為資料描述符和非資料描述符,他們的優先順序是不一樣的。描述符它就是用來**其他類的屬性。

先初體驗一下

class

str(

object):

def__get__

(self, instance, owner)

:print

('__get__ is called'

)print

('instance:%s'

% instance)

print

('owner:%s'

% owner)

def__set__

(self, instance, value)

:print

('__set__ is called'

)print

('instance:%s'

% instance)

print

('value:%s'

% value)

def__delete__

(self, instance)

:print

('__del__ is called'

)class

people

(object):

name = str(

)# **

def__init__

(self, name, age)

: self.name = name

self.age = age

print

('__init__ is called'

)p = people(

'suzijian',19

)# call __set__,__init__

p.name =

'zijian'

# call __set__

#print(p.name) # 呼叫__get__

print

(p.__dict__)

# call __get__

輸出

__set__ is called

instance:

<__main__.people object at 0x000002510212f6c8

>

value:suzijian

__init__ is called

__set__ is called

instance:

<__main__.people object at 0x000002510212f6c8

>

value:zijian

分析結果知道列印__dict__的時候name屬性沒有被列印出來,這是因為name屬性不是__init__方法初始化的,而是被描述符**了。

class

foo:

#在python3中foo是新式類,它實現了三種方法,這個類就被稱作乙個描述符

def__get__

(self, instance, owner):#

pass

def__set__

(self, instance, value)

:pass

def__delete__

(self, instance)

:pass

python 描述 python描述符

在python中,訪問乙個屬性的優先順序順序按照如下順序 1.類屬性2.資料描述符3.例項屬性4.非資料描述符5.getattr 方法。描述符,用一句話來說,就是將某種特殊型別的類的例項指派給另乙個類的屬性 注意 這裡是類屬性,而不是物件屬性 而這種特殊型別的類就是實現了 get set delet...

檔案描述符的理解

核心 kernel 利用檔案描述符 file descriptor 來訪問檔案。檔案描述符是非負整數。開啟現存盤案或新建檔案時,核心會返回乙個檔案描述符。讀寫檔案也需要使用檔案描述符來指定待讀寫的檔案。1.程序級的檔案描述符表 2.系統級的開啟檔案描述符表 3.檔案系統的i node表。檔案描述符是...

python 描述符基本

相關資料 python的描述符 下一站,我等你 描述符的本質類 python為開發者提供了乙個非常強大的功能 描述符。那什麼是描述符呢?通過檢視python的官方文件,我們知道把實現了 get set 和 delete 中的其中任意一種方法的類稱之為描述符,描述符的本質是新式類,並且被 的類 即應用...