中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
python裝飾器--@property

@property
考察 Student 類:

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score
當我們想要修改一個 Student 的 scroe 屬性時,可以這么寫:

s = Student('Bob', 59)
s.score = 60
但是也可以這么寫:

s.score = 1000
顯然,直接給屬性賦值無法檢查分數(shù)的有效性。

如果利用兩個方法:

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.__score = score
    def get_score(self):
        return self.__score
    def set_score(self, score):
        if score < 0 or score > 100:
            raise ValueError('invalid score')
        self.__score = score
這樣一來,s.set_score(1000) 就會報錯。

這種使用 get/set 方法來封裝對一個屬性的訪問在許多面向?qū)ο缶幊痰恼Z言中都很常見。

但是寫 s.get_score() 和 s.set_score() 沒有直接寫 s.score 來得直接。

有沒有兩全其美的方法?----有。

因為Python支持高階函數(shù),在函數(shù)式編程中我們介紹了裝飾器函數(shù),可以用裝飾器函數(shù)把 get/set 方法“裝飾”成屬性調(diào)用:

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.__score = score
    @property
    def score(self):
        return self.__score
    @score.setter
    def score(self, score):
        if score < 0 or score > 100:
            raise ValueError('invalid score')
        self.__score = score
注意: 第一個score(self)是get方法,用@property裝飾,第二個score(self, score)是set方法,用@score.setter裝飾,@score.setter是前一個@property裝飾后的副產(chǎn)品。

現(xiàn)在,就可以像使用屬性一樣設(shè)置score了:

>>> s = Student('Bob', 59)
>>> s.score = 60
>>> print s.score
>>> s.score = 1000
Traceback (most recent call last):
  ...
ValueError: invalid score
說明對 score 賦值實際調(diào)用的是 set方法。

任務
如果沒有定義set方法,就不能對“屬性”賦值,這時,就可以創(chuàng)建一個只讀“屬性”。

請給Student類加一個grade屬性,根據(jù) score 計算 A(>=80)、B、C(<60)。

class Student(object):    def __init__(self, name, score):        self.name = name        self.__score = score    @property    def score(self):        return self.__score    @score.setter    def score(self, score):        if score < 0 or score > 100:            raise ValueError('invalid score')        self.__score = score    ???s = Student('Bob', 59)print s.grades.score = 60print s.grades.score = 99print s.grade

裝飾器果然不是我能理解的,以后慢慢看吧。來自神奇的解釋性語言python。

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
面向?qū)ο缶幊?二)
?2019最新Python基礎(chǔ)學習教程_Python學習路線:描述符說你們不懂她!
實例講解Python編程中@property裝飾器的用法
淺析Python裝飾器中的@property
Python裝飾器和符號@ | Hom
技術(shù)圖文:Python屬性裝飾器詳解
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服