主頁(yè) > 知識(shí)庫(kù) > Python的@property的使用

Python的@property的使用

熱門(mén)標(biāo)簽:長(zhǎng)春極信防封電銷(xiāo)卡批發(fā) 煙臺(tái)電話外呼營(yíng)銷(xiāo)系統(tǒng) 電銷(xiāo)機(jī)器人錄音要學(xué)習(xí)什么 外賣(mài)地址有什么地圖標(biāo)注 企業(yè)彩鈴地圖標(biāo)注 如何地圖標(biāo)注公司 上海正規(guī)的外呼系統(tǒng)最新報(bào)價(jià) 銀川電話機(jī)器人電話 預(yù)覽式外呼系統(tǒng)

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

1、幾個(gè)概念

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

2、舉個(gè)例子

定義一個(gè)類(lèi):

class Student(object):

    _sex='male'

    __age=0

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

>>> 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、解決問(wèn)題

從上面的類(lèi)中我們可以看到,私有屬性無(wú)法在類(lèi)實(shí)例中訪問(wèn),怎么辦呢?當(dāng)我們需要對(duì)類(lèi)的私有屬性__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ù)雜,如果在私有屬性較多的類(lèi)中就不太適用了,所以我們期望尋求一種更簡(jiǎn)單的方式去解決這個(gè)問(wèn)題,比如將這個(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屬性,你可能會(huì)想,既然私有屬性轉(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

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

標(biāo)簽:珠海 盤(pán)錦 宜昌 潮州 上饒 湖北 佳木斯 西寧

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python的@property的使用》,本文關(guān)鍵詞  Python,的,@property,使用,Python,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python的@property的使用》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Python的@property的使用的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章