python符号含义,符号在python中用什么表示
Python描述符是具有“绑定行为”的对象属性。在描述符协议中,它可以通过方法重写属性的访问。本质上,描述符是一个类,但它定义了另一个类中属性的访问方式;换句话说,一个类可以将属性管理委托给描述符类。
在Python中,通过使用描述符,程序员可以定制在引用对象属性时要完成的工作。
本质上,描述符是一个类,但是它定义了如何访问另一个类中的属性。换句话说,一个类可以将属性管理委托给描述符类。
描述符是Python中复杂属性访问的基础。它们在内部用于实现属性、方法、类方法、静态方法和超类型。
描述符类基于以下3种特殊方法。换句话说,这三种方法组成了描述符协议:
__set__(self,obj,type=None):设置属性时会调用这个方法(本节后面用setter表示);
__get__(self,obj,value):读取属性时将调用该方法(在本节后面用getter表示);
__delete__(self,obj):在属性上调用del时将调用此方法。
其中,实现setter和getter方法的描述符类称为数据描述符;相反,如果只实现了getter方法,则称为非数据描述符。
其实每次找到一个属性,描述符协议中的方法都是被类对象的特殊方法__getattribute__()调用的(注意不要和__getattr__())混淆)。也就是说每次使用类对象的调用方法。属性(或getattr(类对象,属性值)),您将隐式调用__getattribute__(),它将按以下顺序查找属性:
验证此属性是否是类实例对象的数据描述符;
如果没有,检查该属性是否能在类实例对象的__dict__中找到;
最后,检查属性是否是类实例对象的非数据描述符。
为了清楚起见,这里有一个例子:
#描述符类别
classrevealAccess:
def__init__(self,initval=None,name=var):
self.val=initval
self.name=name
def__get__(self,obj,objtype):
打印(检索,自己的名字)
returnself.val
def__set__(self,obj,val):
打印(更新,自己的名字)
self.val=val
classmyClass:
x=revealAccess(10, varx )
y=5
m=myClass()
打印(m.x)
m.x=20
打印(m.x)
印刷(年)
运行结果是:
检索变量“x”
10
更新变量“x”
检索变量“x”
20
5从这个例子可以看出,如果一个类的属性有一个数据描述符,那么每次找到这个属性,都会调用描述符的__get__()方法,并返回它的值;同样,每次为属性赋值时,都会调用__set__()方法。
注意,虽然上面的例子中没有使用__del__()方法,但是也很容易理解每次del类对象的时候都会调用这个方法。使用property(或delattr(类对象,属性))语句。
推荐课程:Python基础入门
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。