@property 是Python內置的裝飾器。 作用:就是負責把一個方法變成屬性調用 。
舉例說明:
定義一個類,裏面有兩個方法獲取(get)和設置(set)。
class Student(object):
#獲取成績
def get_score(self):
return self._score
#設置成績
def set_score(self, value):
if not isinstance(value, int):
raise ValueError('score must be an integer!')
if value < 0 or value > 100:
raise ValueError('score must between 0 ~ 100!')
self._score = value
但是,複雜 !
搞一個 類似屬性這樣簡單的方式來訪問類的變量呢?
上裝飾器(decorator),可以給函數動態加上功能。對於類的方法,裝飾器一樣起作用。
class Student(object):
@property
def score(self):
return self._score
@score.setter
def score(self, value):
if not isinstance(value, int):
raise ValueError('score must be an integer!')
if value < 0 or value > 100:
raise ValueError('score must between 0 ~ 100!')
self._score = value
這樣就把一個方法變成屬性,只需要加上@property就可以了。
附帶效果:@property本身又創建了另一個裝飾器@score.setter,負責把一個setter方法變成屬性賦值
意思就是你可以像調用屬性一樣調用方法了!!!。
>>> s = Student()
####################################################
>>> s.score = 60 # OK,實際轉化爲s.set_score(60)
>>> s.score # OK,實際轉化爲s.get_score()
60
####################################################
>>> s.score = 9999
Traceback (most recent call last):
...
ValueError: score must between 0 ~ 100!
這樣寫的好處:1.高級,2.代碼簡單減少出錯!。
(大自然的搬運工,在搬運工獲得知識並傳播知識。咱畢竟是注重版權的人,參考文獻給出來:
廖雪峯的官網 https://www.liaoxuefeng.com/wiki/897692888725344/923030547069856)