婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python的@property的使用

Python的@property的使用

熱門標簽:長春極信防封電銷卡批發 煙臺電話外呼營銷系統 電銷機器人錄音要學習什么 外賣地址有什么地圖標注 企業彩鈴地圖標注 如何地圖標注公司 上海正規的外呼系統最新報價 銀川電話機器人電話 預覽式外呼系統

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

1、幾個概念

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

2、舉個例子

定義一個類:

class Student(object):

    _sex='male'

    __age=0

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

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

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

class Student(object):

    _sex='male'

    __age=0

    def get_age(self):
        return self.__age

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

執行:

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

4、換個方法

但是上面的這種方式略顯復雜,如果在私有屬性較多的類中就不太適用了,所以我們期望尋求一種更簡單的方式去解決這個問題,比如將這個私有屬性轉化為另一個屬性。告訴你個好消息,Python已經幫我們實現了,這就是@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

執行:

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

在上面我們將__age私有屬性轉換為了age屬性,你可能會想,既然私有屬性轉換為了屬性,那我們是不是可以直接修改它呢?答案是不行,因為property雖然將__age轉換為了屬性,但是其不具備setter功能,需要我們去添加。

>>> 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

執行:

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

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

您可能感興趣的文章:
  • 詳解Python裝飾器之@property
  • python property的使用技巧分享
  • python中關于property的最詳細使用方法
  • python中@property的作用和getter setter的解釋
  • Python中關于property使用的小技巧

標簽:珠海 盤錦 宜昌 潮州 上饒 湖北 佳木斯 西寧

巨人網絡通訊聲明:本文標題《Python的@property的使用》,本文關鍵詞  Python,的,@property,使用,Python,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python的@property的使用》相關的同類信息!
  • 本頁收集關于Python的@property的使用的相關信息資訊供網民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章
    主站蜘蛛池模板: 曲水县| 临沭县| 苍溪县| 兴安盟| 资阳市| 山阴县| 甘泉县| 馆陶县| 贵港市| 乌拉特前旗| 镇雄县| 元氏县| 延安市| 萨嘎县| 柳州市| 南投市| 邻水| 盘山县| 饶河县| 中方县| 岚皋县| 永昌县| 平昌县| 璧山县| 滨海县| 关岭| 拜城县| 德庆县| 砚山县| 根河市| 措美县| 万源市| 安新县| 会昌县| 延长县| 沾益县| 麟游县| 隆昌县| 石门县| 龙山县| 鄄城县|