描述符的属性方法

__get__(self, instance, owner): 用于访问属性,返回属性的值

__set__(self, instance, value): 用于给属性赋值时,返回属性的值

__delete__(self, instance): 用于删除属性时,不返回任何内容

将某种特殊类型的类的实例指派给另一个类的属性(注意:是类属性,不是实例属性),而这种特殊类型的类是实现了__get__,__set__,__delete__这三个方法中的一个或多个,此时这个实例被称为描述符,而被指派属性的类叫做描述符类

描述符优点:保护属性不受修改、属性类型检查和自动更新某个依赖属性的值等。

>>>class Desc:      #Desc是包含了三种方法中任意个的特殊类型的类
  def __get__(self,instance,owner):
    print('getting',self,instance,owner)
  def __set__(self,instance,value):
    print('setting',self,instance,value)
  def __delete__(self,instance):
    print('deleting',self,instance)
>>>class MyDesc(): #MyDesc这个类叫描述符类
>>>x = Desc() #类对象被指派给其他类作为属性,此时Desc()就是一个描述符
>>>mydesc = MyDesc()
>>>mydesc.x
getting <__main__.Desc object at 0x0000024A437D8F98> <__main__.MyDesc object at 0x0000024A43857EB8> <class '__main__.MyDesc'>
>>>mydesc.x = 1
setting <__main__.Desc object at 0x0000024A437D8F98> <__main__.MyDesc object at 0x0000024A43857EB8> 1
>>>del mydesc.x
deleting <__main__.Desc object at 0x0000024A437D8F98> <__main__.MyDesc object at 0x0000024A43857EB8>

self: Desc object -> Desc的实例化对象,指的是x

instance: MyDesc -> MyDesc的实例化对象,指的是mydesc

owner: MyDesc -> 指的就是MyDesc类

>>>class MyDes:
  def __init__(self,values,attr):
    self.values = values
    self.attr = attr
  def __get__(self,instance,owner):
    print('正在获取变量:',self.attr)
    return self.values
  def __set__(self,instance,value):
    print('正在修改变量:',self.attr)
    self.values = value
  def __delete__(self,instance):
    print('正在删除变量:',self.attr)
    print('唔,这个变量没法删除')
>>>class Test:
  x=MyDes(10,'x')
>>>test = Test()
>>>test.x
10
>>>test.x=8
正在修改变量: x
>>>test.x
8
>>>del test.x
正在删除变量: x
这个变量没法删除
>>>test.x

最新文章

  1. android 网络请求库的比较
  2. JS定时程序,设定一个一直刷新,又时间间隔的js,读取当前的时间并显示
  3. Google earth
  4. 单机运行环境搭建之 --CentOS-6.5安装配置Tengine
  5. BZOJ3211 花神游历各国
  6. Cmake设置环境变量
  7. docker的一些命令
  8. node+vue进阶【课程学习系统项目实战详细讲解】打通前后端全栈开发(1):创建项目,完成登录功能
  9. scala中Either的一种使用场景
  10. Python学习(六) —— 函数
  11. SQLSERVER安装
  12. Matlab-4:追赶法(crout分解)工具箱
  13. OpenStack Nova虚拟机创建流程解析
  14. 使用PerfView监测.NET程序性能(三):分组
  15. 【Jenkins】安装插件
  16. JAXB--@XmlElementWrapper注解和泛型一起使用
  17. stenciljs 学习十 服务器端渲染
  18. Object-C 类和对象
  19. How to set JAVA environment variables in Linux or CentOS
  20. web.xml servlet、servlet-mapping配置

热门文章

  1. mysql随机取一条记录
  2. 几个有关FPGA的概念
  3. Peakvue和自相关技术轴承诊断
  4. Thymeleaf静态资源引入方式及公共页面代码抽取
  5. OI比赛常数优化
  6. 无线网络中的MIMO与OFDM技术原理分析
  7. Leetcode 9. Palindrome Number(水)
  8. ubantu apt-get install安装php及开展
  9. CSS的一些单位,如rem、px、em、vw、vh、vm
  10. android平台上AES,DES加解密及问题