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)  # 是一个数字
    为什么要坚持,想一想当初!
  • 相关阅读:
    vue语法
    第3章 语言基础(上)
    第2章 HTML中的JavaScript
    第1章 什么是JavaScript
    附录 A ES6附加特性
    第14章 跨浏览器开发技巧
    第13章 历久弥新的事件
    第12章 DOM操作
    第11章 代码模块化
    第10章 正则表达式
  • 原文地址:https://www.cnblogs.com/JerryZao/p/9700373.html
Copyright © 2011-2022 走看看