由於python是動態語言,根據類建立的例項可以任意繫結屬性。
給例項繫結屬性的方法是通過例項變數,或者通過self變數:
class
student
(object):
def__init__
(self, name):
self.name = name
s = student('bob')
s.score = 90
但是,如果student類本身需要繫結乙個屬性呢?可以直接在class中定義屬性,這種屬性是類屬性,歸student類所有:
class
student
(object):
name = 'student
當我們定義了乙個類屬性後,這個屬性雖然歸類所有,但類的所有例項都可以訪問到。來測試一下:
>>> class student(object):
... name = 'student'
...>>> s = student() # 建立例項s
>>> print(s.name) # 列印name屬性,因為例項並沒有name屬性,所以會繼續查詢class的name屬性
student
>>> print(student.name) # 列印類的name屬性
student
>>> s.name = 'michael'
# 給例項繫結name屬性
>>> print(s.name) # 由於例項屬性優先順序比類屬性高,因此,它會遮蔽掉類的name屬性
michael
>>> print(student.name) # 但是類屬性並未消失,用student.name仍然可以訪問
student
>>> del s.name # 如果刪除例項的name屬性
>>> print(s.name) # 再次呼叫s.name,由於例項的name屬性沒有找到,類的name屬性就顯示出來了
student
從上面的例子可以看出,在編寫程式的時候,千萬不要對例項屬性和類屬性使用相同的名字,因為相同名稱的例項屬性將遮蔽掉類屬性,但是當你刪除例項屬性後,再使用相同的名稱,訪問到的將是類屬性。 Python 類屬性和例項屬性
一 簡述二者區別 對類屬性的修改可被儲存在類中 單例模式就是基於類屬性的這種特性 修改後的屬性能夠被子類繼承 例項屬性的修改只對該例項有效,不會對其他例項和其對應類的子類例項造成影響 二 來看下例子 類屬性 class a object a 1 pass print a.a 檢視a類的屬性a,結果為...
python 例項屬性和類屬性
如何在乙個類中定義一些常量,每個物件都可以方便訪問這些常量而不用重新構造?第乙個問題,在 python 的類裡,你只需要和函式並列地宣告並賦值,就可以實現這一點,例如這段 中的 welcome str。一種很常規的做法,是用全大寫來表示常量,因此我們可以在類中使用 self.welcome str ...
python的類屬性和例項屬性
在處理專案的 的時候,發現如下 在多次呼叫的時候會出現問題。class test1 object dataarr def init self,i def run self print self.dataarr t1 test1 1 t2 test1 2 t1.run t2.run 輸出的結果照常理的...