国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python學(xué)習(xí)筆記-使用@property、setter、deleter

CarterLi / 3438人閱讀

摘要:在中,我們需要對(duì)外暴露一個(gè)成員變量的時(shí)候,我們往往需要對(duì)外部輸入的值進(jìn)行判斷,以確保是符合我們的期望的。然后寫(xiě)一個(gè)用于供外部取得值一個(gè)函數(shù)用于供外部設(shè)置值,并對(duì)值進(jìn)行一定的判斷。但是這樣實(shí)現(xiàn)了功能,但是的確使得調(diào)用變得比較麻煩。

在python中,我們需要對(duì)外暴露一個(gè)成員變量的時(shí)候,我們往往需要對(duì)外部輸入的值進(jìn)行判斷,以確保是符合我們的期望的。

class Student(object):
    age = 20
    
student = Student()
print student.age
student.age = "hello"

上述這種寫(xiě)法雖然可以取到age屬性,但是同時(shí)也可以對(duì)age設(shè)置任意值。所以并不合理。

那怎么解決了,我們可以把a(bǔ)ge變成私有的成員變量。然后寫(xiě)一個(gè)getter用于供外部取得age值;一個(gè)setter函數(shù)用于供外部設(shè)置age值,并對(duì)age值進(jìn)行一定的判斷。
例如:

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()設(shè)置age值。但是這樣實(shí)現(xiàn)了功能,但是的確使得調(diào)用變得比較麻煩。有什么地方可以改進(jìn)嗎?

這個(gè)時(shí)候我們可以在gettersetter后面定義一個(gè)成員變量age。例如

age = property(age_getter, age_setter)

這樣我們就可以把a(bǔ)ge當(dāng)成一個(gè)Student的屬性來(lái)調(diào)用和賦值了。
例如:

student.age = "20"
print student.age

你覺(jué)得python只能這么寫(xiě)getter和setter了,那就圖樣圖森破了。python還有逆天的裝飾器來(lái)實(shí)現(xiàn)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實(shí)現(xiàn)了屬性的讀取、賦值、和刪除。當(dāng)然您也可以只是實(shí)現(xiàn)其中的一個(gè)或者幾個(gè)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/38315.html

相關(guān)文章

  • 《你不知道的javascript》筆記_對(duì)象&原型

    摘要:上一篇你不知道的筆記寫(xiě)在前面這是年第一篇博客,回顧去年年初列的學(xué)習(xí)清單,發(fā)現(xiàn)僅有部分完成了。當(dāng)然,這并不影響年是向上的一年在新的城市穩(wěn)定連續(xù)堅(jiān)持健身三個(gè)月早睡早起游戲時(shí)間大大縮減,學(xué)會(huì)生活。 上一篇:《你不知道的javascript》筆記_this 寫(xiě)在前面 這是2019年第一篇博客,回顧去年年初列的學(xué)習(xí)清單,發(fā)現(xiàn)僅有部分完成了。當(dāng)然,這并不影響2018年是向上的一年:在新的城市穩(wěn)定、...

    seasonley 評(píng)論0 收藏0
  • Python 面向?qū)ο缶幊蘋(píng)OP (一) 類(lèi),對(duì)象,屬性,訪問(wèn)權(quán)限

    摘要:面向?qū)ο缶幊讨镁幊淌鞘裁创蠹液茫鳛樾“祝罱鼘W(xué)習(xí)了很多編程的知識(shí),因?yàn)槟X容量有限,特此一一按照學(xué)習(xí)順序記錄下來(lái),如果哪里有錯(cuò)誤,還請(qǐng)大神盡快指出,以免誤導(dǎo)他人。。。繼承也允許把一個(gè)派生類(lèi)的對(duì)象作為一個(gè)基類(lèi)對(duì)象對(duì)待。 Python面向?qū)ο缶幊讨?OOP編程是什么 大家好,作為小白,最近學(xué)習(xí)了很多Python OOP編程的知識(shí),因?yàn)槟X容量有限,特此一一按照學(xué)習(xí)順序記錄下來(lái),如果哪里有...

    hiyayiji 評(píng)論0 收藏0
  • Python OOP 面向?qū)ο缶幊?/b>

    摘要:時(shí)代,如果需要手動(dòng)繼承,如多態(tài)多態(tài)是指,不同的子類(lèi)對(duì)象調(diào)用相同的父類(lèi)方法,會(huì)產(chǎn)生多態(tài)多樣結(jié)果的編程特性。 參考:黑馬程序員教程 - Python基礎(chǔ) 面向?qū)ο?OOP三大特性,且三個(gè)特性是有順序的: 封裝 繼承 多態(tài) 封裝 指的就是把現(xiàn)實(shí)世界的事務(wù),封裝、抽象成編程里的對(duì)象,包括各種屬性和方法。這個(gè)一般都很簡(jiǎn)單,不需要多講。 唯一要注意的就是:推薦從小往大開(kāi)始封裝、開(kāi)發(fā)類(lèi)。比如手槍...

    weknow619 評(píng)論0 收藏0
  • Python - @property 方法變屬性

    摘要:屬性有三個(gè)裝飾器。當(dāng)屬性只有方法,則為只有只讀屬性。使用規(guī)則只讀屬性只有方法,在方法前加上可讀可寫(xiě)屬性有和方法,在方法上使用屬性名。 @property @property是內(nèi)置的裝飾器,與普通裝飾器原理是一樣的,只不過(guò)返回的不是函數(shù),而是類(lèi)對(duì)象. @property負(fù)責(zé)把一個(gè)方法變成屬性進(jìn)行調(diào)用,保證對(duì)參數(shù)進(jìn)行必要的檢查。 屬性有三個(gè)裝飾器:setter、getter、dele...

    Alliot 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<