python @propert裝飾器使用方法原理解析
這篇文章主要介紹了python @propert裝飾器使用方法原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
首先,@propert的作用是把類中的方法『變成』了屬性,方便通過實(shí)例訪問。propert可以有兩種用法:可以把一個(gè)方法變成只讀屬性;可以對(duì)一些屬性進(jìn)行過濾。
想象這樣一個(gè)場(chǎng)景,在實(shí)例化一個(gè)類之后,需要對(duì)類的一個(gè)屬性進(jìn)行賦值,這時(shí)候是沒有對(duì)屬性屬性被賦予的值進(jìn)行判斷的,如果屬性被賦予了一個(gè)不合適的值,那么代碼在后面執(zhí)行的時(shí)候就會(huì)報(bào)錯(cuò),為了避免這種情況,可以有兩種方法解決。
一:設(shè)置一個(gè)方法,對(duì)屬性值進(jìn)行判斷:
class Student(): 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 if __name__ == '__main__': s = Student() s.set_score(value="88") print(s.get_score())
再Student類中,為了避免直接對(duì) _score 屬性操作,我們提供了 get_score 和 set_score 方法,這樣起到了封裝的作用,把一些不想對(duì)外公開的屬性隱蔽起來(lái),而只是提供方法給用戶操作,在方法里面,我們可以檢查參數(shù)的合理性等。這樣做沒什么問題,但是我們有更簡(jiǎn)單的方式來(lái)做這件事。
二:使用propert裝飾器。
class Teacher(): @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 if __name__ == '__main__': t = Teacher() t.score = 10 print(t.score) t.score = 20 print(t.score)
在上面,我們給方法 score 加上了 @property,于是我們可以把 score 當(dāng)成一個(gè)屬性來(lái)用,此時(shí),又會(huì)創(chuàng)建一個(gè)新的裝飾器 score.setter,它可以把被裝飾的方法變成屬性來(lái)賦值。
另外,我們也不一定要使用 score.setter 這個(gè)裝飾器,這時(shí) score 就變成一個(gè)只讀屬性了:
class test(): def __init__(self, s1): self.s = s1 @property def f1(self): return self.s if __name__ == '__main__': t1 = test(s1=90) print(t1.f1)
注意:最后面一行的print(t1.f1)不要加括號(hào),print(t1.f1()),要不會(huì)報(bào)錯(cuò)'int' object is not callable
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python閉包及裝飾器運(yùn)行原理解析
- Python帶參數(shù)的裝飾器運(yùn)行原理解析
- Python新手學(xué)習(xí)裝飾器
- Python類中的裝飾器在當(dāng)前類中的聲明與調(diào)用詳解
- Python裝飾器的應(yīng)用場(chǎng)景代碼總結(jié)
- python GUI庫(kù)圖形界面開發(fā)之PyQt5信號(hào)與槽的高級(jí)使用技巧裝飾器信號(hào)與槽詳細(xì)使用方法與實(shí)例
- Python @property裝飾器原理解析
- Python裝飾器原理與基本用法分析
- python裝飾器相當(dāng)于函數(shù)的調(diào)用方式
- Python學(xué)習(xí)筆記之裝飾器
相關(guān)文章
詳解Django-channels 實(shí)現(xiàn)WebSocket實(shí)例
這篇文章主要介紹了詳解Django-channels實(shí)現(xiàn)WebSocket實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08Python Process多進(jìn)程實(shí)現(xiàn)過程
這篇文章主要介紹了Python Process多進(jìn)程實(shí)現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10python數(shù)據(jù)結(jié)構(gòu)之棧、隊(duì)列及雙端隊(duì)列
在上一章的學(xué)習(xí)中,我們主要學(xué)習(xí)了怎么去衡量一個(gè)算法的好壞,比較常見的方式是使用大O記法,就是所謂的時(shí)間復(fù)雜度,這一章節(jié)我來(lái)學(xué)習(xí)基本的數(shù)據(jù)結(jié)構(gòu),如棧、隊(duì)列和雙端隊(duì)列等等。感興趣的小伙伴可以參考一下2021-12-12python3實(shí)現(xiàn)無(wú)權(quán)最短路徑的方法
這篇文章主要介紹了python3實(shí)現(xiàn)無(wú)權(quán)最短路徑的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05Python實(shí)現(xiàn)視頻轉(zhuǎn)換為字符畫詳解
這篇文章主要介紹了如何通過Python實(shí)現(xiàn)讀取視頻并將其轉(zhuǎn)換為字符畫的示例代碼,文中講解詳細(xì),對(duì)我們的學(xué)習(xí)和工作有一點(diǎn)的價(jià)值,感興趣的小伙伴可以了解一下2021-12-12python手機(jī)號(hào)前7位歸屬地爬蟲代碼實(shí)例
這篇文章主要介紹了python手機(jī)號(hào)前7位歸屬地爬蟲代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03簡(jiǎn)單了解python調(diào)用其他腳本方法實(shí)例
這篇文章主要介紹了簡(jiǎn)單了解python調(diào)用其他腳本方法實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03