首頁 後端開發 Python教學 python描述符有什麼作用

python描述符有什麼作用

May 23, 2019 am 09:48 AM
python

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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1602
29
PHP教程
1504
276
優化用於內存操作的Python 優化用於內存操作的Python Jul 28, 2025 am 03:22 AM

pythoncanbeoptimizedFormized-formemory-boundoperationsbyreducingOverHeadThroughGenerator,有效dattratsures,andManagingObjectLifetimes.first,useGeneratorSInsteadoFlistSteadoflistSteadoFocessLargedAtasetSoneItematatime,desceedingingLoadeGingloadInterveringerverneDraineNterveingerverneDraineNterveInterveIntMory.second.second.second.second,Choos,Choos

python django形式示例 python django形式示例 Jul 27, 2025 am 02:50 AM

首先定義一個包含姓名、郵箱和消息字段的ContactForm表單;2.在視圖中通過判斷POST請求處理表單提交,驗證通過後獲取cleaned_data並返迴響應,否則渲染空表單;3.在模板中使用{{form.as_p}}渲染字段並添加{%csrf_token%}防止CSRF攻擊;4.配置URL路由將/contact/指向contact_view視圖;使用ModelForm可直接關聯模型實現數據保存,DjangoForms實現了數據驗證、HTML渲染與錯誤提示的一體化處理,適合快速開發安全的表單功

Python連接到SQL Server PYODBC示例 Python連接到SQL Server PYODBC示例 Jul 30, 2025 am 02:53 AM

安裝pyodbc:使用pipinstallpyodbc命令安裝庫;2.連接SQLServer:通過pyodbc.connect()方法,使用包含DRIVER、SERVER、DATABASE、UID/PWD或Trusted_Connection的連接字符串,分別支持SQL身份驗證或Windows身份驗證;3.查看已安裝驅動:運行pyodbc.drivers()並篩選含'SQLServer'的驅動名,確保使用如'ODBCDriver17forSQLServer'等正確驅動名稱;4.連接字符串關鍵參數

python shutil rmtree示例 python shutil rmtree示例 Aug 01, 2025 am 05:47 AM

shutil.rmtree()是Python中用於遞歸刪除整個目錄樹的函數,能刪除指定文件夾及其所有內容。 1.基本用法:使用shutil.rmtree(path)刪除目錄,需處理FileNotFoundError、PermissionError等異常。 2.實際應用:可一鍵清除包含子目錄和文件的文件夾,如臨時數據或緩存目錄。 3.注意事項:刪除操作不可恢復;路徑不存在時拋出FileNotFoundError;可能因權限或文件佔用導致失敗。 4.可選參數:可通過ignore_errors=True忽略錯

python iter和下一個示例 python iter和下一個示例 Jul 29, 2025 am 02:20 AM

iter()用於獲取迭代器對象,next()用於獲取下一個元素;1.使用iter()可將列表等可迭代對象轉換為迭代器;2.調用next()逐個獲取元素,當元素耗盡時觸發StopIteration異常;3.通過next(iterator,default)可提供默認值避免異常;4.自定義迭代器需實現__iter__()和__next__()方法,控制迭代邏輯;使用默認值是安全遍歷的常用方式,整個機制簡潔且實用。

什麼是加密貨幣中的統計套利?統計套利是如何運作的? 什麼是加密貨幣中的統計套利?統計套利是如何運作的? Jul 30, 2025 pm 09:12 PM

統計套利簡介統計套利是一種基於數學模型在金融市場中捕捉價格錯配的交易方式。其核心理念源於均值回歸,即資產價格在短期內可能偏離長期趨勢,但最終會回歸其歷史平均水平。交易者利用統計方法分析資產之間的關聯性,尋找那些通常同步變動的資產組合。當這些資產的價格關係出現異常偏離時,便產生套利機會。在加密貨幣市場,統計套利尤為盛行,主要得益於市場本身的低效率與劇烈波動。與傳統金融市場不同,加密貨幣全天候運行,價格極易受到突發新聞、社交媒體情緒及技術升級的影響。這種持續的價格波動頻繁製造出定價偏差,為套利者提供

Python Psycopg2連接池示例 Python Psycopg2連接池示例 Jul 28, 2025 am 03:01 AM

使用psycopg2.pool.SimpleConnectionPool可有效管理數據庫連接,避免頻繁創建和銷毀連接帶來的性能開銷。 1.創建連接池時指定最小和最大連接數及數據庫連接參數,確保連接池初始化成功;2.通過getconn()獲取連接,執行數據庫操作後使用putconn()將連接歸還池中,禁止直接調用conn.close();3.SimpleConnectionPool是線程安全的,適用於多線程環境;4.推薦結合contextmanager實現上下文管理器,確保連接在異常時也能正確歸還;

如何在Python中執行SQL查詢? 如何在Python中執行SQL查詢? Aug 02, 2025 am 01:56 AM

安裝對應數據庫驅動;2.使用connect()連接數據庫;3.創建cursor對象;4.用execute()或executemany()執行SQL並用參數化查詢防注入;5.用fetchall()等獲取結果;6.修改後需commit();7.最後關閉連接或使用上下文管理器自動處理;完整流程確保安全且高效執行SQL操作。

See all articles