静态属性property的本质和应用

一、本质

静态属性property本质就是实现了get,set,delete三种方法

class Foo:
    @property
    def AAA(self):
        print('get的时候运行我啊')

    @AAA.setter
    def AAA(self, value):
        print('set的时候运行我啊')

    @AAA.deleter
    def AAA(self):
        print('delete的时候运行我啊')

    # 或者不加描述符直接这样写 ---> AAA=property(get_AAA,set_AAA,delete_AAA) #内置property三个参数与get,set,delete一一对应 


# 只有在属性AAA定义property后才能定义AAA.setter,AAA.deleter
f1 = Foo()
f1.AAA  # get
f1.AAA = 'aaa'  # setter
del f1.AAA  # deleter

 

二、应用(类型检测)

class People:
    def __init__(self, name):
        self.name = name  # 实例化就触发property

    @property
    def name(self):
        # return self.name #无限递归
        return self.new_name

    @name.setter
    def name(self, value):
        if not isinstance(value, str):
            raise TypeError('必须是字符串类型')
        self.new_name = value

    @name.deleter
    def name(self):
        del self.new_name


p1 = People('alex')  # self.name实际是存放到self.DouNiWan里
# p1.name = 1  # 报错,必须是字符串类型

 

posted @ 2019-02-25 20:26  梁少华  阅读(351)  评论(0编辑  收藏  举报