最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python的@property的使用

 更新時(shí)間:2021年07月11日 16:29:33   作者:Python測試開發(fā)  
通常,當(dāng)我們需要對對象的敏感屬性或者不希望外部直接訪問的屬性進(jìn)行私有化,但是某些時(shí)候我們又需要對這些私有屬性進(jìn)行修改,該怎么處理呢,感興趣的可以了解一下

通常,當(dāng)我們需要對對象的敏感屬性或者不希望外部直接訪問的屬性進(jìn)行私有化,但是某些時(shí)候我們又需要對這些私有屬性進(jìn)行修改,該怎么處理呢?

1、幾個(gè)概念

  • _a(前置單下劃線),這種屬性僅表示約定的私有,非真正的私有。
  • __a(前置雙下劃線),這種屬性表示私有,無法在外部訪問。
  • _a_(前后雙下劃線),這種屬性標(biāo)識系統(tǒng)屬性。(可選)
  • a_(后置單下劃線),這種屬性是為了避免和保留關(guān)鍵字沖突。(可選)

2、舉個(gè)例子

定義一個(gè)類:

class Student(object):

    _sex='male'

    __age=0

執(zhí)行:(私有屬性無法在外部訪問)

>>> stu = Student()
>>> stu._sex
'male'
>>> stu.__age
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Student' object has no attribute '__age'
>>>

3、解決問題

從上面的類中我們可以看到,私有屬性無法在類實(shí)例中訪問,怎么辦呢?當(dāng)我們需要對類的私有屬性__age進(jìn)行查詢和修改的時(shí)候,我們可以定義get_age和set_age去實(shí)現(xiàn)。

class Student(object):

    _sex='male'

    __age=0

    def get_age(self):
        return self.__age

    def set_age(self,age):
        self.__age = age

執(zhí)行:

>>> stu = Student()
>>> stu.get_age()   
0
>>> stu.set_age(18) 
>>> stu.get_age()   
18
>>>

4、換個(gè)方法

但是上面的這種方式略顯復(fù)雜,如果在私有屬性較多的類中就不太適用了,所以我們期望尋求一種更簡單的方式去解決這個(gè)問題,比如將這個(gè)私有屬性轉(zhuǎn)化為另一個(gè)屬性。告訴你個(gè)好消息,Python已經(jīng)幫我們實(shí)現(xiàn)了,這就是@property。

class Student(object):

    _sex='male'

    __age=0

    def get_age(self):
        return self.__age

    def set_age(self,age):
        self.__age = age
    
    @property
    def age(self):
        return self.__age

執(zhí)行:

>>> from payhlib import Student
>>> s = Student()
>>> s.age
0
>>> s.set_age(19)
>>> s.age
19
>>

在上面我們將__age私有屬性轉(zhuǎn)換為了age屬性,你可能會想,既然私有屬性轉(zhuǎn)換為了屬性,那我們是不是可以直接修改它呢?答案是不行,因?yàn)閜roperty雖然將__age轉(zhuǎn)換為了屬性,但是其不具備setter功能,需要我們?nèi)ヌ砑印?br />

>>> from payhlib import Student
>>> s = Student()
>>> s.age  
0
>>> s.age=20
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: can't set attribute
>>>

添加setter方法

class Student(object):

    _sex='male'

    __age=0

    def get_age(self):
        return self.__age

    def set_age(self,age):
        self.__age = age
    
    @property
    def age(self):
        return self.__age
    
    @age.setter
    def age(self,value):
        self.__age=value

執(zhí)行:

>>> from payhlib import Student
>>> s = Student()
>>> s.age
0
>>> s.age=20
>>> s.age    
20
>>>

到此,@peoperty分享完畢,關(guān)于它的實(shí)現(xiàn)原理你可以查看源碼進(jìn)行研究。更多相關(guān)Python的@property內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 利用Python3實(shí)現(xiàn)統(tǒng)計(jì)大量單詞中各字母出現(xiàn)的次數(shù)和頻率的方法

    利用Python3實(shí)現(xiàn)統(tǒng)計(jì)大量單詞中各字母出現(xiàn)的次數(shù)和頻率的方法

    這篇文章主要介紹了利用Python3實(shí)現(xiàn)統(tǒng)計(jì)大量單詞中各字母出現(xiàn)的次數(shù)和頻率,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Windows11使用Cpython?編譯文件報(bào)錯(cuò)?error:?Unable?to?find?vcvarsall.bat?完美解決方法

    Windows11使用Cpython?編譯文件報(bào)錯(cuò)?error:?Unable?to?find?vcvars

    這篇文章主要介紹了Windows11使用Cpython編譯文件報(bào)錯(cuò)error:Unable?to find?vcvarsall.bat完美解決方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Tensorflow與RNN、雙向LSTM等的踩坑記錄及解決

    Tensorflow與RNN、雙向LSTM等的踩坑記錄及解決

    這篇文章主要介紹了Tensorflow與RNN、雙向LSTM等的踩坑記錄及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 手把手教你如何使python變?yōu)榭蓤?zhí)行文件

    手把手教你如何使python變?yōu)榭蓤?zhí)行文件

    對于exe可執(zhí)行文件,相信大家都不陌生,下面這篇文章主要給大家介紹了關(guān)于如何使python變?yōu)榭蓤?zhí)行文件的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • python表格存取的方法

    python表格存取的方法

    這篇文章主要為大家詳細(xì)介紹了python表格存取的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Python實(shí)現(xiàn)一個(gè)Git日志統(tǒng)計(jì)分析的小工具

    Python實(shí)現(xiàn)一個(gè)Git日志統(tǒng)計(jì)分析的小工具

    這篇文章主要給大家介紹了關(guān)于利用Python如何實(shí)現(xiàn)一個(gè)Git日志統(tǒng)計(jì)分析小工具的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Python實(shí)現(xiàn)輸出某區(qū)間范圍內(nèi)全部素?cái)?shù)的方法

    Python實(shí)現(xiàn)輸出某區(qū)間范圍內(nèi)全部素?cái)?shù)的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)輸出某區(qū)間范圍內(nèi)全部素?cái)?shù)的方法,涉及Python數(shù)值運(yùn)算、排序、判斷等相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • python三大神器之fabric使用教程

    python三大神器之fabric使用教程

    fabric 是一個(gè)python包 是一個(gè)基于ssh的部署工具包,這篇文章主要介紹了python三大神器之fabric,需要的朋友可以參考下
    2019-06-06
  • python中的itertools的使用詳解

    python中的itertools的使用詳解

    這篇文章主要介紹了python中的itertools的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Python趣味實(shí)戰(zhàn)之手把手教你實(shí)現(xiàn)舉牌小人生成器

    Python趣味實(shí)戰(zhàn)之手把手教你實(shí)現(xiàn)舉牌小人生成器

    前幾天寫了一個(gè)嬰兒級別的爬蟲圖文教程,大家很喜歡.恰好周末看到有人咨詢這個(gè) “舉牌小人” 怎么做?基于此,我想借此為大家再寫一篇 “爬蟲應(yīng)用” 的文章,教你制作一個(gè)好玩兒的 “舉牌小人” ,需要的朋友可以參考下
    2021-06-06

最新評論

临汾市| 陆川县| 宜春市| 辉县市| 新丰县| 麦盖提县| 贵德县| 镇巴县| 庆城县| 上思县| 舒城县| 紫阳县| 庆云县| 丰宁| 松滋市| 东乡| 南京市| 望谟县| 温宿县| 阿巴嘎旗| 忻州市| 开远市| 扬中市| 中卫市| 隆尧县| 吉木乃县| 华容县| 沙河市| 沁阳市| 江城| 五指山市| 肇庆市| 荥经县| 康定县| 沭阳县| 新河县| 河源市| 石楼县| 漳浦县| 南岸区| 吴堡县|