摘要:屬性有三個裝飾器。當屬性只有方法,則為只有只讀屬性。使用規則只讀屬性只有方法,在方法前加上可讀可寫屬性有和方法,在方法上使用屬性名。
@property
@property是內置的裝飾器,與普通裝飾器原理是一樣的,只不過返回的不是函數,而是類對象.
@property負責把一個方法變成屬性進行調用,保證對參數進行必要的檢查。
屬性有三個裝飾器:setter、getter、deleter。當屬性只有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
上述例子中,在綁定屬性的時候,直接把屬性暴露出去,導致可以隨意修改,但是對score的修改又沒有做校驗限制等。
為了限制屬性,例如score的范圍,可以通過一個set_score()方法來設置成績,再通過一個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數據,判斷輸入的范圍 raise ValueError("score must between 0 -100 ") self.score = value
試運行:
>>> s = Student() # 不需要s=Student(60),因為沒有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
所以,有沒有既能檢查參數,又可以用類似屬性這樣簡單的方式來訪問、判斷類的變量呢?
是否還記得裝飾器decorator可以給函數動態加上功能?對于類的方法,裝飾器一樣起作用。
使用規則:
只讀屬性:只有getter方法,在方法前加上@property;
可讀可寫屬性:有getter和setter方法,在setter方法上使用@屬性名.setter。
例如:
class Student(object): # score:可讀可寫屬性, getter與setter方法 # 把一個getter方法變成屬性,只需要加上@property就可以了 @property def score(self): return self._score # 創建另一個裝飾器@score.setter,負責把一個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...
點個贊再走吧
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42635.html
摘要:一點點小刀刀晚上收到了某招聘軟件的的消息,心里慌的不行。所以在上面的代碼中,我們可以考慮把改為來更好的看出繼承關系。定義方法,在被用于循環時返回迭代對象,循環會不斷的調用方法拿到下一個值,直到終止。 一點點小刀刀 晚上收到了某招聘軟件的HR的消息,心里慌的不行。因為很想換崗位了,可是當機會來的時候,我卻只能表示能力不行。所以要速速的加油了!!! 開始學習的分割 日常一點點小雞血!請不要...
摘要:描述符登場什么是描述符一般來說,描述符是一個具有綁定行為的對象屬性,其屬性的訪問被描述符協議方法覆寫。先看如何用描述符來解決上面邏輯重復的問題。 關于@property裝飾器 在Python中我們使用@property裝飾器來把對函數的調用偽裝成對屬性的訪問。 那么為什么要這樣做呢?因為@property讓我們將自定義的代碼同變量的訪問/設定聯系在了一起,同時為你的類保持一個簡單的訪問...
摘要:測試對象是否為某類型返回以內的倍數返回是一堆或者當為偶數時生成一個新列表將其加入中的,就是用定義的一個匿名函數,并通過函數,將其應用到列表中的每個元素。 1.1 使用函數 在Python中,函數必須先聲明,然后才能調用它,使用函數時,只要按照函數定義的形式,向函數傳遞必需的參數,就可以調用函數完成相應的功能或者獲得函數返回的處理結果。 如果函數有返回值,那么需要在函數中使用retur...
摘要:于發表了著名的有害論的論文引起了長達數年的論戰并由此產生了結構化程序設計方法。到現在為止面向對象已經成為了主流的開發思想。面向對象的程序設計優點解決了程序的擴展性。 [Python3]Python面向對象的程序設計 一、面向對象的程序設計的由來 1.第一階段:面向機器,1940年以前 最早的程序設計都是采用機器語言來編寫的,直接使用二進制碼來表示機器能夠識別和執行的指令和數據。 簡單來...
閱讀 3408·2021-09-22 16:00
閱讀 3452·2021-09-07 10:26
閱讀 2989·2019-08-30 15:55
閱讀 2858·2019-08-30 13:48
閱讀 1366·2019-08-30 12:58
閱讀 2162·2019-08-30 11:15
閱讀 945·2019-08-30 11:08
閱讀 525·2019-08-29 18:41