摘要:屬性有三個裝飾器。當(dāng)屬性只有方法,則為只有只讀屬性。使用規(guī)則只讀屬性只有方法,在方法前加上可讀可寫屬性有和方法,在方法上使用屬性名。
@property
@property是內(nèi)置的裝飾器,與普通裝飾器原理是一樣的,只不過返回的不是函數(shù),而是類對象.
@property負(fù)責(zé)把一個方法變成屬性進(jìn)行調(diào)用,保證對參數(shù)進(jìn)行必要的檢查。
屬性有三個裝飾器:setter、getter、deleter。當(dāng)屬性只有getter方法,則為只有只讀屬性。否則為可讀寫屬性。
定義一個類:
class Student(object): def __init__(self,score): self.__score = score ## __score 翻譯成 _Student__score # 允許外部代碼獲取score def get_score(self): print("%s"%self.__score) return self.__score
上述例子中,在綁定屬性的時候,直接把屬性暴露出去,導(dǎo)致可以隨意修改,但是對score的修改又沒有做校驗(yàn)限制等。
為了限制屬性,例如score的范圍,可以通過一個set_score()方法來設(shè)置成績,再通過一個get_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: # 輸入的int數(shù)據(jù),判斷輸入的范圍 raise ValueError("score must between 0 -100 ") self.score = value
試運(yùn)行:
>>> s = Student() # 不需要s=Student(60),因?yàn)闆]有init方法 >>> s.set_score (60) >>> s.get_score() 60 >>> s.set_score(101) Traceback (most recent call last): File "", line 1, in File " ", line 8, in set_score ValueError: score must between 0 -100
所以,有沒有既能檢查參數(shù),又可以用類似屬性這樣簡單的方式來訪問、判斷類的變量呢?
是否還記得裝飾器decorator可以給函數(shù)動態(tài)加上功能?對于類的方法,裝飾器一樣起作用。
使用規(guī)則:
只讀屬性:只有g(shù)etter方法,在方法前加上@property;
可讀可寫屬性:有g(shù)etter和setter方法,在setter方法上使用@屬性名.setter。
例如:
class Student(object): # score:可讀可寫屬性, getter與setter方法 # 把一個getter方法變成屬性,只需要加上@property就可以了 @property def score(self): return self._score # 創(chuàng)建另一個裝飾器@score.setter,負(fù)責(zé)把一個setter方法變成屬性賦值 @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 # 定義只讀屬性,只定義getter方法 @property def age(self): return self._age
? thanks for watching, keep on updating...
點(diǎn)個贊再走吧
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42635.html
摘要:一點(diǎn)點(diǎn)小刀刀晚上收到了某招聘軟件的的消息,心里慌的不行。所以在上面的代碼中,我們可以考慮把改為來更好的看出繼承關(guān)系。定義方法,在被用于循環(huán)時返回迭代對象,循環(huán)會不斷的調(diào)用方法拿到下一個值,直到終止。 一點(diǎn)點(diǎn)小刀刀 晚上收到了某招聘軟件的HR的消息,心里慌的不行。因?yàn)楹芟霌Q崗位了,可是當(dāng)機(jī)會來的時候,我卻只能表示能力不行。所以要速速的加油了!??! 開始學(xué)習(xí)的分割 日常一點(diǎn)點(diǎn)小雞血!請不要...
摘要:描述符登場什么是描述符一般來說,描述符是一個具有綁定行為的對象屬性,其屬性的訪問被描述符協(xié)議方法覆寫。先看如何用描述符來解決上面邏輯重復(fù)的問題。 關(guān)于@property裝飾器 在Python中我們使用@property裝飾器來把對函數(shù)的調(diào)用偽裝成對屬性的訪問。 那么為什么要這樣做呢?因?yàn)锧property讓我們將自定義的代碼同變量的訪問/設(shè)定聯(lián)系在了一起,同時為你的類保持一個簡單的訪問...
摘要:測試對象是否為某類型返回以內(nèi)的倍數(shù)返回是一堆或者當(dāng)為偶數(shù)時生成一個新列表將其加入中的,就是用定義的一個匿名函數(shù),并通過函數(shù),將其應(yīng)用到列表中的每個元素。 1.1 使用函數(shù) 在Python中,函數(shù)必須先聲明,然后才能調(diào)用它,使用函數(shù)時,只要按照函數(shù)定義的形式,向函數(shù)傳遞必需的參數(shù),就可以調(diào)用函數(shù)完成相應(yīng)的功能或者獲得函數(shù)返回的處理結(jié)果。 如果函數(shù)有返回值,那么需要在函數(shù)中使用retur...
摘要:于發(fā)表了著名的有害論的論文引起了長達(dá)數(shù)年的論戰(zhàn)并由此產(chǎn)生了結(jié)構(gòu)化程序設(shè)計方法。到現(xiàn)在為止面向?qū)ο笠呀?jīng)成為了主流的開發(fā)思想。面向?qū)ο蟮某绦蛟O(shè)計優(yōu)點(diǎn)解決了程序的擴(kuò)展性。 [Python3]Python面向?qū)ο蟮某绦蛟O(shè)計 一、面向?qū)ο蟮某绦蛟O(shè)計的由來 1.第一階段:面向機(jī)器,1940年以前 最早的程序設(shè)計都是采用機(jī)器語言來編寫的,直接使用二進(jìn)制碼來表示機(jī)器能夠識別和執(zhí)行的指令和數(shù)據(jù)。 簡單來...
閱讀 3426·2021-09-22 16:00
閱讀 3474·2021-09-07 10:26
閱讀 3034·2019-08-30 15:55
閱讀 2872·2019-08-30 13:48
閱讀 1378·2019-08-30 12:58
閱讀 2180·2019-08-30 11:15
閱讀 961·2019-08-30 11:08
閱讀 537·2019-08-29 18:41