Python是面向?qū)ο?OOP)的語(yǔ)言, 而且在OOP這條路上比Java走得更徹底, 因?yàn)樵赑ython里, 一切皆對(duì)象, 包括int, float等基本數(shù)據(jù)類型.
在Java里, 若要為一個(gè)類定義只讀的屬性, 只需要將目標(biāo)屬性用private修飾, 然后只提供getter()而不提供setter(). 但Python沒有private關(guān)鍵字, 如何定義只讀屬性呢? 有兩種方法, 第一種跟Java類似, 通過(guò)定義私有屬性實(shí)現(xiàn). 第二種是通過(guò)__ setattr__.
通過(guò)私有屬性
用私有屬性+@property定義只讀屬性, 需要預(yù)先定義好屬性名, 然后實(shí)現(xiàn)對(duì)應(yīng)的getter方法.,如果對(duì)屬性還不懂。
輸出:
可以看出, 屬性x是可讀但不可寫的.
通過(guò) __ setattr__當(dāng)我們調(diào)用obj.attr=value時(shí)發(fā)生了什么?
很簡(jiǎn)單, 調(diào)用了obj的__ setattr__方法. 可通過(guò)以下代碼驗(yàn)證:
輸出:
所以呢, 只需要在__ setattr__ 方法里擋一下, 就可以阻止屬性值的設(shè)置, 可謂是釜底抽薪.
代碼:
輸出:
-
JAVA
+關(guān)注
關(guān)注
19文章
2952瀏覽量
104493 -
python
+關(guān)注
關(guān)注
55文章
4774瀏覽量
84386
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論