Python是面向?qū)ο?OOP)的語言, 而且在OOP這條路上比Java走得更徹底, 因?yàn)樵赑ython里, 一切皆對象, 包括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)對應(yīng)的getter方法.,如果對屬性還不懂。
輸出:
可以看出, 屬性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文章
2984瀏覽量
106858 -
python
+關(guān)注
關(guān)注
56文章
4825瀏覽量
86176
發(fā)布評(píng)論請先 登錄
使用Python API在OpenVINO?中創(chuàng)建了用于異步推理的自定義代碼,輸出張量的打印結(jié)果會(huì)重復(fù),為什么?
創(chuàng)建了用于OpenVINO?推理的自定義C++和Python代碼,從C++代碼中獲得的結(jié)果與Python代碼不同是為什么?
運(yùn)行OVModelForCausalLM Python模塊時(shí)出錯(cuò)了,怎么解決?
深入探索GCC的attribute屬性
Chart FX-使用API傳輸數(shù)據(jù) 使用Value屬性傳輸數(shù)據(jù)

Chart FX之DataGrid電子表格

等離子的基本屬性_等離子體如何發(fā)生

評(píng)論