Python是面向?qū)ο?OOP)的語言, 而且在OOP這條路上比Java走得更徹底, 因?yàn)樵赑ython里, 一切皆對(duì)象, 包括int, float等基本數(shù)據(jù)類型.
在Java里, 若要為一個(gè)類定義只讀的屬性, 只需要將目標(biāo)屬性用private修飾, 然后只提供getter()而不提供setter(). 但Python沒有private關(guān)鍵字, 如何定義只讀屬性呢? 有兩種方法, 第一種跟Java類似, 通過定義私有屬性實(shí)現(xiàn). 第二種是通過__ setattr__.
通過私有屬性
用私有屬性+@property定義只讀屬性, 需要預(yù)先定義好屬性名, 然后實(shí)現(xiàn)對(duì)應(yīng)的getter方法.,如果對(duì)屬性還不懂。
輸出:
可以看出, 屬性x是可讀但不可寫的.
通過 __ setattr__當(dāng)我們調(diào)用obj.attr=value時(shí)發(fā)生了什么?
很簡單, 調(diào)用了obj的__ setattr__方法. 可通過以下代碼驗(yàn)證:
輸出:
所以呢, 只需要在__ setattr__ 方法里擋一下, 就可以阻止屬性值的設(shè)置, 可謂是釜底抽薪.
代碼:
輸出:
-
JAVA
+關(guān)注
關(guān)注
20文章
3001瀏覽量
116422 -
python
+關(guān)注
關(guān)注
57文章
4876瀏覽量
90025
發(fā)布評(píng)論請(qǐng)先 登錄
無法去除 Python VisionFive.i2c 庫的終端輸出?
探索Atmel AT27LV010A:低功耗只讀存儲(chǔ)器的卓越之選
沒有專利的opencv-python 版本
堆棧的定義,堆棧的使用方法
Python調(diào)用API教程
商品類目屬性查詢接口技術(shù)實(shí)現(xiàn)詳解
如何將設(shè)USB存儲(chǔ)設(shè)備設(shè)為只讀?
termux如何搭建python游戲
在Python中字符串逆序有幾種方式,代碼是什么
python app不能運(yùn)行怎么解決?
Micro OLED 陽極像素定義層制備方法及白光干涉儀在光刻圖形的測量
?如何在虛擬環(huán)境中使用 Python,提升你的開發(fā)體驗(yàn)~
零基礎(chǔ)入門:如何在樹莓派上編寫和運(yùn)行Python程序?
Python的只讀屬性定義方法
評(píng)論