python符号含义,符号在python中用什么表示

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: