zoukankan      html  css  js  c++  java
  • Python-面向对象之property装饰器的实现(数据描述器)

    参考代码:

     1 from  functools import partial
     2 
     3 class Property:  # 数据描述符
     4     def __init__(self, fget=None, fset=None):
     5         self.fget = fget
     6         self.fset = fset
     7 
     8     def __get__(self, instance, owner):
     9         return partial(self.fget, instance)()
    10 
    11     def __set__(self, instance, value):
    12         # instance._data = value # 修改了保护变量
    13         self.fset(instance, value)
    14 
    15     def setter(self, fn):
    16         self.fset = fn
    17         return self
    18 class A:
    19     def __init__(self, data):
    20         self._data = data  # 实例化的时候,保护属性直接注入
    21 
    22     @Property  # data = Property(data)
    23     def data(self):
    24         return self._data
    25 
    26     @data.setter  # data = data.setter(data)= Property(data)
    27     def data(self, value):
    28         self._data = value
    29 
    30 a = A(9)
    31 print(a.__dict__)  # {'_data': 9}
    32 
    33 print(a.data)  # 是一个数字
    34 
    35 a.data = 8
    36 print(a.__dict__)
    37 print(a.data)  # 是一个数字
    38 
    39 a.data = 0
    40 print(a.__dict__)
    41 print(a.data)  # 是一个数字
    为什么要坚持,想一想当初!
  • 相关阅读:
    垃圾回收机制,正则模块
    日常模块
    文件路径带有字符串的处理方法
    QT进制之间的相互转换
    4-7 selectors模块
    4-5 异步IO模型
    4-4 多路复用IO模型
    4-3 非阻塞IO
    4-2 阻塞IO
    4-1 IO模型介绍
  • 原文地址:https://www.cnblogs.com/JerryZao/p/9700373.html
Copyright © 2011-2022 走看看