Python-property

前言:半夜了好累啊,今天就這樣二零休息休息早上想早點起來!!!
Python內置的@property裝飾器就是負責把一個方法變成屬性調用的,而@property真正強大的是可以限制屬性的定義

class User(object):

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, value):
        if not isinstance(value, int):
            raise ValueError('age must be an integer!')
        if value < 0 or value > 100:
            raise ValueError('age must between 0 ~ 100!')
        self._age = value

把一個getter方法變成屬性,只需要加上@property就可以了,此時,@property本身又創建了另一個裝飾器@score.setter,負責把一個setter方法變成屬性賦值,於是,我們就擁有一個可控的屬性操作:當然我們還可以定義只讀屬性,只定義getter方法,不定義setter方法就是一個只讀屬性:

from datetime import date, datetime
class User:
    def __init__(self, name, birthday):
        self.name = name
        self.birthday = birthday
        self._age = 0


    @property
    def age(self):
        return datetime.now().year - self.birthday.year


if __name__ == "__main__":
    user = User("bobby", date(year=1987, month=1, day=1))
    user.age = 30
報錯:
user.age = 30
AttributeError: can't set attribute
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章