當前位置:編程學習大全網 - 源碼下載 - 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__方法。

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

  • 上一篇:股票翻倍幅圖通達信,麻煩高手做個選股公式?
  • 下一篇:疫情防控方案和應急預案2022完整版分享6篇
  • copyright 2024編程學習大全網