class Foo: def __init__(self,val): self.__name=val @property #等于把一个方法封装成了一个数据属性,调用时直接self.name(1.未定义getter就直接执行这个,2.有getter则执行getteer) def name(self): print("hahha") return self.__name @name.getter def name(self): print('get') return self.__name # pass @name.setter #不定义setter,通过self.name=sss无法直接修改 def name(self,value): print('set') self.__name=value @name.deleter #执行删除操作 del f.name 时执行 def name(self): raise TypeError("can not delete") f=Foo('wes') print(f.name) f.name='hel' print(f.name)
将一个类的函数定义成特性以后,对象再去使用的时候obj.name,
根本无法察觉自己的name是执行了一个函数然后计算出来的,这
种特性的使用方式遵循了统一访问的原则