關於類屬性和例項屬性

2021-04-22 17:04:06 字數 1108 閱讀 1070

python果然是乙個優雅的語言,就連他的oop都做的那麼的優雅,呵呵不讚美了,說點實在的,關於類的屬性和例項的屬性,在python中應用一定要小心和謹慎,如果沒有明確的目的,不要去修改類屬性。

類中定義的屬性,相當於靜態變數,用類名加句點訪問和用例項加句點訪問,都能獲取值。但是如果進行計算的話,用類名訪問是可以的,而用例項訪問則是給例項增加了乙個同名屬性。看例子:

>>> class foo(object):

... x = 1.5

...>>> foo = foo()

>>> foo.x

1.5>>> foo.x = 1.7 # try to update class attr 試著更新類屬性

>>> foo.x # looks good so far... 現在看起來還不錯

1.7>>> foo.x # nope, just created a new inst attr 呵呵,沒有變,只是建立了乙個新的實

例屬性1.5

此時,刪除例項的屬性 del foo.x。"遮蔽"的類屬性又出現了

>>> del foo.x # delete instance attribute 刪除例項屬性

>>> foo.x # can now access class attr again 又可以訪問到類屬性

所以,給乙個與類屬性同名的例項屬性賦值,我們會有效地「隱藏」類屬性,但一旦我們刪除

了這個例項屬性,類屬性又重見天日

但...在類屬性可變的情況下,一切都不同了:

>>> class foo(object):

... x =

...>>> foo = foo()

>>> foo.x

>>> foo.x[2004] = 'valid path'

>>> foo.x

>>> foo.x # it works!!! 生效了

>>> del foo.x # no shadow so cannot delete 沒有遮蔽所以不能刪除掉

traceback (most recent call last): file "", line 1, in ?

del foo.x

attributeerror: x

>>>

例項屬性和類屬性

例項屬性和類屬性 由於python是動態語言,根據類建立的例項可以任意繫結屬性。給例項繫結屬性的方法是通過例項變數,或者通過self變數 class student object def init self,name self.name name s student bob s.score 90但是...

類屬性和例項屬性

類屬性就是類物件所擁有的屬性,它被所有類物件的例項物件所共有,在記憶體中只存在乙個副本,這個和c 中類的靜態成員變數有點類似。對於公有的類屬性,在類外可以通過類物件和例項物件訪問 class people object name tom 公有的類屬性 age 12 私有的類屬性 p people p...

類屬性和例項屬性

1.不可修改型別 物件屬性只要賦值,那麼此物件用的屬性就是自己的屬性,不會再用同名的類屬性,類屬性的變化不會再影響到此物件。2.可修改型別 a.修改內部屬性的值,只要修改不是賦值,那麼修改會影響到所有物件以及類屬性。b.如果是重新賦值操作,效果等同於不可修改型別。class a books 三國 西...