一、与函数装饰器的相似点
1、都是可调用对象
2、在不修改装饰对象的源代码和调用方式的前提下,添加了新功能
二、property装饰器的独特用法:不管property装饰器新增的是什么功能,结果都是给装饰对象伪造了了一个数据属性。
三、具体用法:将对象数据属性的查/改/删的操作按照,封装===》定义接口===》伪装接口,的顺序装饰,最后的结果,使用者看来似乎还是直接对对象数据属性的操作方法,其实已被接口内的功能进行了限制。
class Human: def __init__(self, name): self.__name = name # 隐藏了 name,外部无法直接通过 .name 访问 @property def name(self): return self.__name @name.setter def name(self, new_name): self.__name = new_name @name.deleter def name(self): print('不可删除') human_obj_1 = Human('tom') print(human_obj_1.name) # 结果为 tom human_obj_1.name = 'jan' print(human_obj_1.name) # 结果为 jan del human_obj_1.name # 抛出提示 不可删除 print(human_obj_1.name) # 结果为 jan