通过实例解析python描述符原理作用

yipeiwu_com6年前Python基础

这篇文章主要介绍了通过实例解析python描述符原理作用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

本质上看,描述符是一个类,只不过它定义了另一个类中属性的访问方式。换句话说,一个类可以将属性管理全权委托给描述符类。

描述符类基于以下三种特殊方法,换句话说,这三种方法组成了描述符协议:

  • __set__(self, obj, type = None): 在设置属性时,将调用这一方法。
  • __get__(self, obj, value): 在读取属性时将调用这一方法。
  • __delete__(self, obj): 对属性调用del时将调用这一方法。

其中,实现了setter和getter方法的描述符被称为数据描述符,反之,如果只实现了getter方法,则称为非数据描述符。

#描述符类
class revealAccess:
  def __init__(self, initval = None, name = 'var'):
    self.val = initval
    self.name = name
  def __get__(self, obj, objtype):
    print("Retrieving", self.name)
    return self.val
  def __set__(self, obj, val):
    print("updating", self.name)
    self.val = val

class myClass:
  x = revelAccess(10, 'var "x"')
  y = 5
m = myClass()
print(m.x)
m.x = 20
print(m.x)
print(m.y)
Retrieving var "x"
10
updating var "x"
Retrieving var "x"
20
5

如果一个类的某个属性有数据描述符,那么每次查找这个属性时,都会调用描述符的__get__()方法,并返回它的值;同样,每次在对属性赋值时,也会调用__set__()方法。
当每次使用del类对象.属性(或者delattr(类对象,属性))语句时,都会调用该方法。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

Django 全局的static和templates的使用详解

Django 全局的static和templates的使用详解

一、问题 首先我们在进行Django框架搭建的时候我们需要建立一个全局的变量,一是为了实现代码的复用,二是为了方便管理,如下图的样式 二、解决 1、修改setting里面的配置文件...

Django+uni-app实现数据通信中的请求跨域的示例代码

Django+uni-app实现数据通信中的请求跨域的示例代码

前后端分离的模式下,后端使用Django RestFramework,前端使用uni-app来进行APP的开发。 前端代码: Django后端跨域配置 settings.py配...

python3图片文件批量重命名处理

本文实例为大家分享了python3图片文件批量重命名的具体代码,供大家参考,具体内容如下 #!/usr/bin/env python # coding=utf-8 # 批量重命名图片...

在Python中使用成员运算符的示例

在Python中使用成员运算符的示例

下表列出了所有Python语言支持的成员运算符。  例如: 试试下面的例子就明白了所有的Python编程语言提供会员运算符: #!/usr/bin/python a...

python 实现按对象传值

python 实现按对象传值

今天研究了下Python中的传值问题,通常在C、C++中有按值传递和按引用传递两种情况,按值传递时会拷贝实参,而按引用传递时只是给形参赋了一个指向实参的指针,但在python却没有区分这...