python描述符有什麼作用

(*-*)浩
發布: 2020-09-18 12:08:43
原創
4938 人瀏覽過

python描述子的作用:代理一個類別的屬性,讓程式設計師在引用一個物件屬性時自訂要完成的工作;它是實現大部分Python類別特性中最底層的資料結構的實現手段,是使用到裝飾器或元類別的大型框架中的一個非常重要組件。

python描述符有什麼作用

本文主要介紹描述符的定義,個人的一些理解。希望看完這篇文章後,你對描述詞有了更清楚的認知。

什麼是描述符

官方的定義:描述符是一種具有「捆綁行為」的物件屬性。當存取(取得、設定和刪除)它的屬性時,實際上是呼叫特殊的方法(_get_(),_set_(),_delete_())。也就是說,如果一個物件定義了這三種方法的任何一種,它就是一個描述符。

描述子的作用是用來代理一個類別的屬性,需要注意的是描述子不能定義在被使用類別的建構子中,只能定義為類別的屬性,它只屬於類別的,不屬於實例,我們可以透過查看實例和類別的字典來確認這一點。

描述子是實現大部分Python類別特性中最底層的資料結構的實作手段,我們常使用的@classmethod、@staticmethd、@property、甚至是__slots__等屬性都是透過描述符來實現的。它是許多高階程式庫和框架的重要工具之一,是使用到裝飾器或元類別的大型框架中的一個非常重要元件。註:裝飾器和元類別等概念我們在以後文章中說明。

如下範例一個描述符及引用描述符類別的程式碼:

class Descriptors:
 
    def __init__(self, key, value_type):
        self.key = key
        self.value_type = value_type
 
    def __get__(self, instance, owner):
        print("执行Descriptors的get")
        return instance.__dict__[self.key]
 
    def __set__(self, instance, value):
        print("执行Descriptors的set")
        if not isinstance(value, self.value_type):
            raise TypeError("参数%s必须为%s"%(self.key, self.value_type))
        instance.__dict__[self.key] = value 
 
    def __delete__(self, instance):
        print("执行Descriptors的delete")
        instance.__dict__.pop(self.key) 
 
class Person:
 
    name = Descriptors("name", str)
    age = Descriptors("age", int)
 
    def __init__(self, name, age):
        self.name = name
        self.age = age
 
 
person = Person("xiaoming", 15)
print(person.__dict__)
person.name
person.name = "jone"
print(person.__dict__)
登入後複製

其中,Descriptors類別就是一個描述符,Person是使用描述符的類別。

類別的__dict__屬性是類別的一個內建屬性,類別的靜態函數、類別函數、普通函數、全域變數、一些內建的屬性都是放在類別__dict__裡。

在輸出描述子的變數時,會呼叫描述子中的__get__方法,在設定描述子變數時,會呼叫描述子中的__set__方法。

如上範例的運行結果如下:

python描述符有什麼作用

#

以上是python描述符有什麼作用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板