Python內置的@property裝飾器

@propertyPython內置的裝飾器。 作用:就是負責把一個方法變成屬性調用

舉例說明:
定義一個類,裏面有兩個方法獲取(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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章