亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python的@property的使用

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

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

1、幾個概念

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

2、舉個例子

定義一個類:

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、解決問題

從上面的類中我們可以看到,私有屬性無法在類實例中訪問,怎么辦呢?當(dāng)我們需要對類的私有屬性__age進行查詢和修改的時候,我們可以定義get_age和set_age去實現(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、換個方法

但是上面的這種方式略顯復(fù)雜,如果在私有屬性較多的類中就不太適用了,所以我們期望尋求一種更簡單的方式去解決這個問題,比如將這個私有屬性轉(zhuǎn)化為另一個屬性。告訴你個好消息,Python已經(jīng)幫我們實現(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)換為了屬性,那我們是不是可以直接修改它呢?答案是不行,因為property雖然將__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)于它的實現(xiàn)原理你可以查看源碼進行研究。更多相關(guān)Python的@property內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Python編寫生成驗證碼的腳本的教程

    Python編寫生成驗證碼的腳本的教程

    這篇文章主要介紹了Python編寫生成驗證碼的腳本的教程,驗證碼在web編程中幾乎是必備的功能,需要的朋友可以參考下
    2015-05-05
  • 如何使用Python實現(xiàn)一個簡易的ORM模型

    如何使用Python實現(xiàn)一個簡易的ORM模型

    ORM(Object Relational Mapping)是一種程序設(shè)計技術(shù),用于實現(xiàn)面向?qū)ο缶幊陶Z言里不同類型系統(tǒng)的數(shù)據(jù)之間的轉(zhuǎn)換。本文將介紹如何使用Python實現(xiàn)一個簡易的ORM
    2021-05-05
  • 深入淺析Python 中的sklearn模型選擇

    深入淺析Python 中的sklearn模型選擇

    這篇文章主要介紹了Python sklearn模型選擇的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • python迭代器實例簡析

    python迭代器實例簡析

    這篇文章主要介紹了python迭代器,以一個簡單實例的形式分析了Python中迭代器的用法及注意事項,需要的朋友可以參考下
    2014-09-09
  • Python PyQt5實戰(zhàn)項目之查詢器的實現(xiàn)流程詳解

    Python PyQt5實戰(zhàn)項目之查詢器的實現(xiàn)流程詳解

    PyQt5以一套Python模塊的形式來實現(xiàn)功能。它包含了超過620個類,600個方法和函數(shù)。它是一個多平臺的工具套件,它可以運行在所有的主流操作系統(tǒng)中,包含Unix,Windows和Mac OS。PyQt5采用雙重許可模式。開發(fā)者可以在GPL和社區(qū)授權(quán)之間選擇
    2021-11-11
  • Python實現(xiàn)迪杰斯特拉算法過程解析

    Python實現(xiàn)迪杰斯特拉算法過程解析

    這篇文章主要介紹了Python實現(xiàn)迪杰斯特拉算法過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • 人工智能-Python實現(xiàn)多項式回歸

    人工智能-Python實現(xiàn)多項式回歸

    這篇文章主要介紹了人工智能-Python實現(xiàn)多項式回歸,上一次我們講解了線性回歸,這次我們重點分析多項式回歸,需要的小伙伴可以參考一下
    2022-01-01
  • python 中不同包 類 方法 之間的調(diào)用詳解

    python 中不同包 類 方法 之間的調(diào)用詳解

    這篇文章主要介紹了python 中不同包 類 方法 之間的調(diào)用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python?pandas處理缺失值方法詳解(dropna、drop、fillna)

    Python?pandas處理缺失值方法詳解(dropna、drop、fillna)

    缺失數(shù)據(jù)會在很多數(shù)據(jù)分析應(yīng)用中出現(xiàn),pandas的目標(biāo)之一就是盡可能無痛地處理缺失值,下面這篇文章主要給大家介紹了關(guān)于Python?pandas處理缺失值方法的相關(guān)資料,處理方法分別是dropna、drop、fillna,需要的朋友可以參考下
    2022-08-08
  • python多進程使用apply_async的使用方法詳解

    python多進程使用apply_async的使用方法詳解

    這篇文章主要介紹了python多進程使用apply_async使用方法詳解,apply_async是異步非阻塞式,不用等待當(dāng)前進程執(zhí)行完畢,隨時跟進操作系統(tǒng)調(diào)度來進行進程切換,即多個進程并行執(zhí)行,提高程序的執(zhí)行效率
    2022-09-09

最新評論