Python 描述符是一種建立託管屬性的方法。每當一個屬性被查詢時,就會發生一個動作。這個動作預設是get,set或delete。不過,有時候某個應用可能會有
更多的需求,需要你設計一些更複雜的動作。最好的解決方案就是編寫一個執行符合需求的動作的函數,然後指定它在屬性被存取時運行。一個具有這種功能的物件
稱為描述符。描述子是python方法,綁定方法,super,PRoperty,staticmethod和classmethod的實作基礎。
1.描述子協定
描述子descriptor就是一個表示屬性值的對象,透過實作一個或多個__get__,__set__,__delete__方法,可以將描述子與屬性存取機制掛鉤,也可以自訂這些操作。
__get__(self,instance,own):用於存取屬性,傳回屬性的值。 instance為使用描述符的實例對象,own為實例所屬的類別。當透過類別存取屬性時,instance為None。
__set__(self,instance,value):設定屬性值。
__delete__(self,instance):刪除屬性值。
2.描述子如何實作
class Descriptor(object):
def __get__(self, instance, owner):
print 'getting:%s'%self._name def __set__(self, instance, name):
print 'setting:%s'%name
self._name = name
def __delete (self, instance): name
def __delete____________f, instance): name
def __delete____________f, instance): %%):com del self._name
class Person (object):
name = Descriptor()
一個很簡單的描述符物件就產生了,現在可以對一個Person物件進行屬性name的讀取,設定與刪除:
>>> p=Person( )
>>> p.name='john'setting:john
>>> p.name
getting:john
'john'
>>> del p.name
deleting:john
>>> del p.name
deleting:john
類別綁定:如果A是個類別對象,呼叫方法:A.__dict__['attr'].__get__(None,A)super綁定:如果a是個super實例,那麼super(B,obj).m ()透過查詢obj.__class__.__mro__找到B的基類A,然後執行A.__dict__['m'].__get__(obj,obj.__class__)3.執行屬性類型檢查的描述符🎜
class TypedProperty(object):
def __init__(self,name,attr_type,default=None):
self.name='_'+name
遠default if default else attr_type()
def __get__(self,instance,own):
return getattr(instance,self.name,self.default)
raise TypeError,'Must be %s'%self.type
setattr(instance,self.name,value)
def __delete__(self,instance):
def __delete__(self,instance):
class 集ject):
name=TypedProperty('name',str)
num=TypedProperty('num',int,37)
,str設為int型,就會報錯:
>>> f.name=21
TypeError: Must be
>>> del f.name
AttributeError: Can not delete attribute
上述描述符實際上是儲存在實例上的,name透過setattr(f,_name,value)儲存在f._name上,num儲存在f._num上,這也是加底線的原因,

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

記事本++7.3.1
好用且免費的程式碼編輯器

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能