@property

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是执行了一个函数然后计算出来的,这

种特性的使用方式遵循了统一访问的原则

原文地址:https://www.cnblogs.com/wuxi9864/p/9945685.html