<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        介紹Python的@property裝飾器的用法

        來源:懂視網 責編:小采 時間:2020-11-27 14:39:28
        文檔

        介紹Python的@property裝飾器的用法

        介紹Python的@property裝飾器的用法:在綁定屬性時,如果我們直接把屬性暴露出去,雖然寫起來很簡單,但是,沒辦法檢查參數,導致可以把成績隨便改: s = Student() s.score = 9999 這顯然不合邏輯。為了限制score的范圍,可以通過一個set_score()方法來設置成績,再通過一個get_sc
        推薦度:
        導讀介紹Python的@property裝飾器的用法:在綁定屬性時,如果我們直接把屬性暴露出去,雖然寫起來很簡單,但是,沒辦法檢查參數,導致可以把成績隨便改: s = Student() s.score = 9999 這顯然不合邏輯。為了限制score的范圍,可以通過一個set_score()方法來設置成績,再通過一個get_sc

        在綁定屬性時,如果我們直接把屬性暴露出去,雖然寫起來很簡單,但是,沒辦法檢查參數,導致可以把成績隨便改:

        s = Student()
        s.score = 9999
        
        

        這顯然不合邏輯。為了限制score的范圍,可以通過一個set_score()方法來設置成績,再通過一個get_score()來獲取成績,這樣,在set_score()方法里,就可以檢查參數:

        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
        
        

        現在,對任意的Student實例進行操作,就不能隨心所欲地設置score了:

        >>> s = Student()
        >>> s.set_score(60) # ok!
        >>> s.get_score()
        60
        >>> s.set_score(9999)
        Traceback (most recent call last):
         ...
        ValueError: score must between 0 ~ 100!
        
        

        但是,上面的調用方法又略顯復雜,沒有直接用屬性這么直接簡單。

        有沒有既能檢查參數,又可以用類似屬性這樣簡單的方式來訪問類的變量呢?對于追求完美的Python程序員來說,這是必須要做到的!

        還記得裝飾器(decorator)可以給函數動態加上功能嗎?對于類的方法,裝飾器一樣起作用。Python內置的@property裝飾器就是負責把一個方法變成屬性調用的:

        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的實現比較復雜,我們先考察如何使用。把一個getter方法變成屬性,只需要加上@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!
        
        

        注意到這個神奇的@property,我們在對實例屬性操作的時候,就知道該屬性很可能不是直接暴露的,而是通過getter和setter方法來實現的。

        還可以定義只讀屬性,只定義getter方法,不定義setter方法就是一個只讀屬性:

        class Student(object):
        
         @property
         def birth(self):
         return self._birth
        
         @birth.setter
         def birth(self, value):
         self._birth = value
        
         @property
         def age(self):
         return 2014 - self._birth
        
        

        上面的birth是可讀寫屬性,而age就是一個只讀屬性,因為age可以根據birth和當前時間計算出來。
        小結

        @property廣泛應用在類的定義中,可以讓調用者寫出簡短的代碼,同時保證對參數進行必要的檢查,這樣,程序運行時就減少了出錯的可能性。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        介紹Python的@property裝飾器的用法

        介紹Python的@property裝飾器的用法:在綁定屬性時,如果我們直接把屬性暴露出去,雖然寫起來很簡單,但是,沒辦法檢查參數,導致可以把成績隨便改: s = Student() s.score = 9999 這顯然不合邏輯。為了限制score的范圍,可以通過一個set_score()方法來設置成績,再通過一個get_sc
        推薦度:
        標簽: 使用 介紹 python
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: av在线亚洲欧洲日产一区二区| 日韩免费观看一级毛片看看 | 亚洲AV永久无码精品水牛影视| 免费又黄又爽又猛大片午夜 | 亚洲成综合人影院在院播放| 免费人成在线观看网站品爱网| 亚洲人成依人成综合网| 亚欧免费无码aⅴ在线观看| 亚洲国产精品第一区二区| 最近免费中文在线视频| 亚洲午夜电影一区二区三区| 大陆一级毛片免费视频观看| 亚洲成熟丰满熟妇高潮XXXXX| 日本免费的一级v一片| 伊人久久国产免费观看视频| 亚洲精品tv久久久久久久久| 久9热免费精品视频在线观看| 亚洲免费二区三区| 国产色爽免费视频| 中文字幕a∨在线乱码免费看 | 亚洲一区二区三区在线| 美女被免费视频网站a国产| 菠萝菠萝蜜在线免费视频| 亚洲成色WWW久久网站| 国产免费一区二区三区| 亚洲精品无码少妇30P| 高清在线亚洲精品国产二区| 国产一精品一av一免费爽爽| 国产精品亚洲专区在线观看| 国产免费av一区二区三区| a级毛片毛片免费观看永久| 亚洲制服丝袜在线播放| 国产一级特黄高清免费大片| 在线观看片免费人成视频无码| 91亚洲精品自在在线观看| 免费成人午夜视频| 蜜臀AV免费一区二区三区| 国产亚洲情侣久久精品| 91精品国产亚洲爽啪在线影院| 永久在线毛片免费观看| 免费精品一区二区三区第35|