Python内置的@property装饰器

总结:
1). Python内置的@property装饰器就是负责把一个方法变成属性调用的;
2). @property本身又创建了另一个装饰器@state.setter,负责把一个setter方法变成属性赋值,于是,我们就拥有一个可控的属性操作.
3). @property广泛应用在类的定义中,可以让调用者写出简短的代码,
同时保证对参数进行必要的检查,这样,程序运行时就减少了出错的可能性。

源代码应用范例: 让属性只读:

	from datetime import  date

    # Read-only field accessors
    @property
    def year(self):
        # year (1-9999)
        return self._year

    @property
    def month(self):
        # month (1-12)
        return self._month

    @property
    def day(self):
        # day (1-31)
        return self._day
        
	d.year = 2020     # 此处不成功, year是只读的
	del d.year        # 此处不成功, year是只读的
ERRRED='ERROR'
OKGREEN='OK'
from colorFont import  *
class Book(object):
    def __init__(self, name, kind, state):
        self.name = name
        self.kind = kind
        # 0: 借出  1: "未借出"
        # 书的状态只能是0或者1, 如果是其他, 应该报错;
        # 查看书状态, 希望是汉字形式, 有实际意义的;
        self.__state  = 0

    @property   # 将这个方法转换为类的属性; print(book.state)
    def state(self):
        if self.__state == 0:
            return  ERRRED + "借出"
        elif self.__state == 1:
            return  OKGREEN + "未借出"

    @state.setter  # book.state = 0
    def state(self, value):
        if value in (0,1):
            # 更新书状态
            self.__state = value
        else:
            print(ERRRED + "更新错误, 必须是0或者1")

    @state.deleter  # del book.state
    def state(self):
        del self.__state
        print(OKGREEN + "删除书状态成功!")
if __name__ == "__main__":
    book = Book("python核心编程", 'python', 1)
    # book.set_state(3)  # book.state = 3
    # print(book.get_state())  # print(book.state)
    book.state = 0
    print(book.state)#ERROR借出
    del book.state#OK删除书状态成功!

猜你喜欢

转载自blog.csdn.net/qq_41386300/article/details/86556204