摘要:在中,我們需要對外暴露一個成員變量的時候,我們往往需要對外部輸入的值進行判斷,以確保是符合我們的期望的。然后寫一個用于供外部取得值一個函數用于供外部設置值,并對值進行一定的判斷。但是這樣實現了功能,但是的確使得調用變得比較麻煩。
在python中,我們需要對外暴露一個成員變量的時候,我們往往需要對外部輸入的值進行判斷,以確保是符合我們的期望的。
class Student(object): age = 20 student = Student() print student.age student.age = "hello"
上述這種寫法雖然可以取到age屬性,但是同時也可以對age設置任意值。所以并不合理。
那怎么解決了,我們可以把age變成私有的成員變量。然后寫一個getter用于供外部取得age值;一個setter函數用于供外部設置age值,并對age值進行一定的判斷。
例如:
class Student(object): def __init__(self): self._age = None def age_getter(self): return self._age def age_setter(self, age): if isinstance(age, str) and age.isdigit(): age = int(age) else: raise ValueError("age is illegal") if isinstance(age,int): self._age = age
那么我就需要student.age_getter()取得age,student.age_setter()設置age值。但是這樣實現了功能,但是的確使得調用變得比較麻煩。有什么地方可以改進嗎?
這個時候我們可以在getter和setter后面定義一個成員變量age。例如
age = property(age_getter, age_setter)
這樣我們就可以把age當成一個Student的屬性來調用和賦值了。
例如:
student.age = "20" print student.age
你覺得python只能這么寫getter和setter了,那就圖樣圖森破了。python還有逆天的裝飾器來實現getter、setter、和deleter。
例如:
class Student(object): def __init__(self): self._age = None @property def age(self): return self._age @age.setter def age(self, age): if isinstance(age, int): self._age = age return if isinstance(age, str) and age.isdigit(): age = int(age) self._age = age else: raise ValueError("age is illegal") @age.deleter def age(self): del self._age student = Student() student.age = 20 print student.age del student.age
上面的例子中用@property、x.setter x.deleter實現了屬性的讀取、賦值、和刪除。當然您也可以只是實現其中的一個或者幾個。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38315.html
摘要:上一篇你不知道的筆記寫在前面這是年第一篇博客,回顧去年年初列的學習清單,發現僅有部分完成了。當然,這并不影響年是向上的一年在新的城市穩定連續堅持健身三個月早睡早起游戲時間大大縮減,學會生活。 上一篇:《你不知道的javascript》筆記_this 寫在前面 這是2019年第一篇博客,回顧去年年初列的學習清單,發現僅有部分完成了。當然,這并不影響2018年是向上的一年:在新的城市穩定、...
摘要:面向對象編程之旅編程是什么大家好,作為小白,最近學習了很多編程的知識,因為腦容量有限,特此一一按照學習順序記錄下來,如果哪里有錯誤,還請大神盡快指出,以免誤導他人。。。繼承也允許把一個派生類的對象作為一個基類對象對待。 Python面向對象編程之旅 OOP編程是什么 大家好,作為小白,最近學習了很多Python OOP編程的知識,因為腦容量有限,特此一一按照學習順序記錄下來,如果哪里有...
摘要:時代,如果需要手動繼承,如多態多態是指,不同的子類對象調用相同的父類方法,會產生多態多樣結果的編程特性。 參考:黑馬程序員教程 - Python基礎 面向對象 OOP三大特性,且三個特性是有順序的: 封裝 繼承 多態 封裝 指的就是把現實世界的事務,封裝、抽象成編程里的對象,包括各種屬性和方法。這個一般都很簡單,不需要多講。 唯一要注意的就是:推薦從小往大開始封裝、開發類。比如手槍...
摘要:屬性有三個裝飾器。當屬性只有方法,則為只有只讀屬性。使用規則只讀屬性只有方法,在方法前加上可讀可寫屬性有和方法,在方法上使用屬性名。 @property @property是內置的裝飾器,與普通裝飾器原理是一樣的,只不過返回的不是函數,而是類對象. @property負責把一個方法變成屬性進行調用,保證對參數進行必要的檢查。 屬性有三個裝飾器:setter、getter、dele...
閱讀 638·2021-11-25 09:43
閱讀 1906·2021-11-17 09:33
閱讀 824·2021-09-07 09:58
閱讀 2062·2021-08-16 10:52
閱讀 482·2019-08-30 15:52
閱讀 1722·2019-08-30 15:43
閱讀 974·2019-08-30 15:43
閱讀 2924·2019-08-29 16:41