【進階06】【自學筆記】Python類的 property 屬性
阿新 • • 發佈:2022-01-12
在之前的學習中,物件的屬性,我們都是通過把變數值賦值給物件本身來實現的。
>>> class Student:pass ... >>> >>> s = Student() >>> s.name = "王炳明" >>> s.age = 27
直接賦值會存在一個問題,就是無法對屬性值進行合法性較驗,比如我給 age 賦值的是負數,在業務上這種資料是不合法的。但上面那種寫法是無法檢查出來的。
>>> s.age = -27
>>> s.age
-27
為了實現屬性的合法性校驗,Python 引入的 property 屬性。
請看下面這段程式碼
class Student: @property def age(self): return self._age @age.setter def age(self, value): if 0 <= value <= 150: self._age = value else: raise ValueError("Valid value must be in [0, 150]")
此時再對 age 屬性進行賦值就會對 value 的值進行合法性檢查,小於 0 或者 大於 150 的都是不合法資料。
>>> s = Student()
>>> s.age = -27 #函式改造
成屬性。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 10, in age
ValueError: Valid value must be in [0, 150]
由此我們知道了property
,其實是 Python 中一個內建的裝飾器,它可以在新式類中把一個函式改造
成屬性。
-
當你讀取屬性值時,會進入被
property
裝飾的函式。 -
當你對屬性進行賦值時,會進入被
@xx.setter
裝飾的函式。 -
兩個裝飾器,一定是
@property
在前面,而@xx.setter
在後