溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python的@property如何使用

發(fā)布時(shí)間:2022-03-29 16:42:05 來(lái)源:億速云 閱讀:144 作者:iii 欄目:移動(dòng)開(kāi)發(fā)

這篇文章主要介紹了Python的@property如何使用的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇Python的@property如何使用文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。

1、幾個(gè)概念

  • _a(前置單下劃線),這種屬性僅表示約定的私有,非真正的私有。

  • __a(前置雙下劃線),這種屬性表示私有,無(wú)法在外部訪問(wèn)。

  • _a_(前后雙下劃線),這種屬性標(biāo)識(shí)系統(tǒng)屬性。(可選)

  • a_(后置單下劃線),這種屬性是為了避免和保留關(guān)鍵字沖突。(可選)

2、舉個(gè)例子

定義一個(gè)類:

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

從上面的類中我們可以看到,私有屬性無(wú)法在類實(shí)例中訪問(wèn),怎么辦呢?當(dāng)我們需要對(duì)類的私有屬性__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ù)雜,如果在私有屬性較多的類中就不太適用了,所以我們期望尋求一種更簡(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
>>>

關(guān)于“Python的@property如何使用”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“Python的@property如何使用”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI