• 描述符类


    # 描述符就是将某种特殊类型的类的实例指派给另一个类的属性
    class MyDescriptor: # 某种特殊类型的类就是下面方法中至少要实现一个
    def __get__(self, instance, owner): # __get__用于访问属性,它返回属性的值
    print('getting...', self, instance, owner)

    def __set__(self, instance, value): # __set__赋值时被调用,不返回任何内容
    print('setting...', self, instance, value)

    def __delete__(self, instance): # __delete__控制删除操作,不返回任何内容
    print('deleting...', self, instance)


    class Test:
    x = MyDescriptor() # MyDescriptor类的实例x,作为Test类的属性


    test = Test()
    test.x # 调用__get__方法,打印出getting... self的值,instance的值和owner的值
    print(test) # 打印出<__main__.Test object at 0x00000233F57555C8>,就是instance的值
    print(Test) # 打印出<class '__main__.Test'>,就是owner的值
    test.x = 'X-man' # 调用__set__方法,打印出setting... self的值,instance的值和value的值,value就是X-man
    del test.x # 调用__delete__方法,打印出deleting... self的值和instance的值

    # property
    class MyProperty:
    def __init__(self, fget=None, fset=None, fdel=None):
    self.fget = fget
    self.fset = fset
    self.fdel = fdel

    def __get__(self, instance, owner):
    return self.fget(instance)

    def __set__(self, instance, value):
    self.fset(instance, value)

    def __delete__(self, instance):
    self.fdel(instance)


    class C:
    def __init__(self):
    self._x = None

    def getX(self):
    return self._x

    def setX(self, value):
    self._x = value

    def delX(self):
    del self._x

    x = MyProperty(getX, setX, delX)


    c = C()
    c.x = 'hello'
    print(c.x) # c.x赋值打印hello
    print(c._x) # c._x也是hello
    del c.x # __delete__控制删除操作,不返回任何内容
  • 相关阅读:
    第六章实验报告
    第三次实验报告
    循环结构课后反思
    分支结构试验
    第七组509寝室课后习题4.34
    c语言实验报告
    第九章 结构体与共用体
    第八章实验报告(指针)
    第7章 数组实验报告
    函数与宏定义实验报告(2)
  • 原文地址:https://www.cnblogs.com/laosun0204/p/14140217.html
Copyright © 2020-2023  润新知