python防止隨意修改類屬性的實(shí)現(xiàn)方法
如果不想允許隨意修改一個(gè)類的某個(gè)屬性,常用的方法是使用property裝飾器以及在屬性前加下劃線。
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)一哪天手抖了呢...
但如果使用雙下劃線——
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的名稱改寫特性(name mangling)。python會(huì)將以雙下劃線開(kāi)頭的實(shí)例屬性名前加上一個(gè)下劃線和類名存入實(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.類也有__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-03matplotlib基礎(chǔ)繪圖命令之bar的使用方法
這篇文章主要介紹了matplotlib基礎(chǔ)繪圖命令之bar的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Django框架創(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-03Python 使用 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-02NumPy?與?Python?內(nèi)置列表計(jì)算標(biāo)準(zhǔn)差區(qū)別詳析
這篇文章主要介紹了NumPy與Python內(nèi)置列表計(jì)算標(biāo)準(zhǔn)差區(qū)別詳析,NumPy,是Numerical?Python的簡(jiǎn)稱,用于高性能科學(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é)幾門語(yǔ)言,本想學(xué)習(xí)Java,無(wú)奈感覺(jué)Java的語(yǔ)法太啰嗦了。很多人都推薦Python,說(shuō)它的語(yǔ)法簡(jiǎn)潔,執(zhí)行效率高。趁這兩天空閑,開(kāi)始學(xué)習(xí)Python。2014-07-07