zoukankan      html  css  js  c++  java
  • python描述符

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

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

    1. _set_(self, obj, type = None): 在设置属性时,将调用这一方法。
    2. _get_(self, obj, value): 在读取属性时将调用这一方法。
    3. _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(类对象,属性))语句时,都会调用该方法。

  • 相关阅读:
    有用网站
    html5页面布局总结
    video和audio支持格式
    关于浏览器缓冲
    java常见面试题汇总
    jvm常用相关参数
    规律字符串拼接
    线程基础知识
    Kafka学习
    Redis学习
  • 原文地址:https://www.cnblogs.com/xiaobaizzz/p/12227340.html
Copyright © 2011-2022 走看看