python防止隨意修改類(lèi)屬性的實(shí)現(xiàn)方法
如果不想允許隨意修改一個(gè)類(lèi)的某個(gè)屬性,常用的方法是使用property裝飾器以及在屬性前加下劃線(xiàn)。
class V:
def __init__(self, x):
self._x = x
@property
def x(self):
return self._x
雖然這樣是沒(méi)法直接修改x了,但還是可以通過(guò)_x很輕易地修改x。
>>>v = V(5) >>>v.x 5 >>>v._x 5 >>>v.x = 4 Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: cant set attribute >>>v._x = 4 >>>v.x 4
萬(wàn)一哪天手抖了呢...
但如果使用雙下劃線(xiàn)——
class V:
def __init__(self,x):
self.__x = x
@property
def x(self):
return self.__x
>>>v = V(5) >>>v.__x = 4 >>>v.__x 4 >>>v.x 5
原因在于python的名稱(chēng)改寫(xiě)特性(name mangling)。python會(huì)將以雙下劃線(xiàn)開(kāi)頭的實(shí)例屬性名前加上一個(gè)下劃線(xiàn)和類(lèi)名存入實(shí)例的__dict__屬性中。
>>>v = V(5)
>>>v.__dict__
{'_V__x': 5}
>>>v.__x = 4
>>>v.__dict__
{'_V__x': 5, '__x': 4}
當(dāng)然,修改v.x的值還是可以做到的的,只需通過(guò)修改v._V__x就可以了,不過(guò)誤操作的可能性已經(jīng)降低很多了。
p.s.類(lèi)也有__dict__屬性。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Queue 實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模型(實(shí)例講解)
下面小編就為大家?guī)?lái)一篇Queue 實(shí)現(xiàn)生產(chǎn)者消費(fèi)者模型(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
python Task在協(xié)程調(diào)用實(shí)例講解
在本篇文章里小編給大家整理了一篇關(guān)于python Task如何在協(xié)程調(diào)用的相關(guān)內(nèi)容,有興趣的朋友們可以參考下。2021-04-04
pytorch 使用加載訓(xùn)練好的模型做inference
今天小編就為大家分享一篇pytorch 使用加載訓(xùn)練好的模型做inference,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
Python3 Post登錄并且保存cookie登錄其他頁(yè)面的方法
今天小編就為大家分享一篇Python3 Post登錄并且保存cookie登錄其他頁(yè)面的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
2023年最新版Python?3.12.0安裝使用指南(推薦!)
這篇文章主要給大家介紹了關(guān)于2023年最新版Python?3.12.0安裝使用的相關(guān)資料,Python?現(xiàn)在是非常流行的編程語(yǔ)言,當(dāng)然并不是說(shuō)Python語(yǔ)言性能多么強(qiáng)大,而是Python使用非常方便,特別是現(xiàn)在AI和大數(shù)據(jù)非常流行,用?Python?實(shí)現(xiàn)是非常容易的,需要的朋友可以參考下2023-10-10
Python實(shí)現(xiàn)數(shù)字的格式化輸出
這篇文章主要介紹了Python如何實(shí)現(xiàn)數(shù)字的格式化輸出,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-08-08
Python?如何實(shí)現(xiàn)批量轉(zhuǎn)換視頻音頻的采樣率
這篇文章主要分享一個(gè)python代碼,可以將多個(gè)視頻中的音頻轉(zhuǎn)化為相同采樣率的視頻,具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下2021-11-11
PyQt5中QLCDNumber的實(shí)現(xiàn)
本文主要介紹了PyQt5中QLCDNumber的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04

