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)文章
Python簡(jiǎn)單生成隨機(jī)數(shù)的方法示例
這篇文章主要介紹了Python簡(jiǎn)單生成隨機(jī)數(shù)的方法,結(jié)合實(shí)例形式分析了Python基于random模塊生成隨機(jī)數(shù)的相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
matplotlib基礎(chǔ)繪圖命令之bar的使用方法
這篇文章主要介紹了matplotlib基礎(chǔ)繪圖命令之bar的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
Django框架創(chuàng)建mysql連接與使用示例
這篇文章主要介紹了Django框架創(chuàng)建mysql連接與使用,簡(jiǎn)單介紹了Linux環(huán)境下mysql的安裝,并結(jié)合實(shí)例形式分析了Django框架基于第三方庫(kù)pymysql連接mysql數(shù)據(jù)庫(kù)相關(guān)操作技巧,需要的朋友可以參考下2019-07-07
使用Django和Python創(chuàng)建Json response的方法
下面小編就為大家分享一篇使用Django和Python創(chuàng)建Json response的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
Python 使用 environs 庫(kù)定義環(huán)境變量的方法
這篇文章主要介紹了Python 使用 environs 庫(kù)來(lái)更好地定義環(huán)境變量,本節(jié)我們以 Python 項(xiàng)目為例,說(shuō)說(shuō)環(huán)境變量的設(shè)置。通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
NumPy?與?Python?內(nèi)置列表計(jì)算標(biāo)準(zhǔn)差區(qū)別詳析
這篇文章主要介紹了NumPy與Python內(nèi)置列表計(jì)算標(biāo)準(zhǔn)差區(qū)別詳析,NumPy,是Numerical?Python的簡(jiǎn)稱(chēng),用于高性能科學(xué)計(jì)算和數(shù)據(jù)分析的基礎(chǔ)包,更多相關(guān)內(nèi)容需要的朋友可以參考一下2022-07-07
在Windows8上的搭建Python和Django環(huán)境
作為一個(gè).NET程序員,真心不喜歡以及PHP這種松散的語(yǔ)法。有人說(shuō),程序員應(yīng)該多學(xué)幾門(mén)語(yǔ)言,本想學(xué)習(xí)Java,無(wú)奈感覺(jué)Java的語(yǔ)法太啰嗦了。很多人都推薦Python,說(shuō)它的語(yǔ)法簡(jiǎn)潔,執(zhí)行效率高。趁這兩天空閑,開(kāi)始學(xué)習(xí)Python。2014-07-07

