Python之例項屬性和類屬性

2022-01-31 09:16:08 字數 1304 閱讀 5073

廖雪峰python

在前面已經說過由於python是動態語言,可以根據類的例項繫結任何的屬性。

給例項繫結屬性的方法是通過例項變數,或者self變數繫結的:

class

student(object):

def__init__

(self, name):

self.name =name

s = student('

bob'

)s.score = 90

那怎麼給乙個類本身繫結屬性呢?方法是直接在class中定義的屬性就是類屬性,如:

class

student(object):

name = '

student

'

這樣一來所有類的例項都可以訪問到,name屬性既指例項的name屬性又指類的name屬性,當兩者同時存在時,例項屬性會遮蔽掉類屬性:

>>> 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

tips:在編寫程式的時候,千萬不要對例項屬性和類屬性使用相同的名字,因為相同名稱的例項屬性將遮蔽掉類屬性,但是當你刪除例項屬性後,再使用相同的名稱,訪問到的將是類屬性。

Python 類屬性和例項屬性

一 簡述二者區別 對類屬性的修改可被儲存在類中 單例模式就是基於類屬性的這種特性 修改後的屬性能夠被子類繼承 例項屬性的修改只對該例項有效,不會對其他例項和其對應類的子類例項造成影響 二 來看下例子 類屬性 class a object a 1 pass print a.a 檢視a類的屬性a,結果為...

python 例項屬性和類屬性

如何在乙個類中定義一些常量,每個物件都可以方便訪問這些常量而不用重新構造?第乙個問題,在 python 的類裡,你只需要和函式並列地宣告並賦值,就可以實現這一點,例如這段 中的 welcome str。一種很常規的做法,是用全大寫來表示常量,因此我們可以在類中使用 self.welcome str ...

Python類屬性,例項屬性

dreamfor的部落格 1.python類資料屬性 定義在類裡面但在函式外面的變數,它們都是靜態的。一段很簡單的 但反應了很多 class a a 1 乙個類裡面有個屬性a a a b a a.a b.a a.a 這個屬效能被例項和類訪問 a.a 2 b.a a.a 改變例項a的屬性a,例項b和類...