物件導向程式設計 例項屬性和類屬性(六)

2022-03-14 07:11:28 字數 1920 閱讀 9793

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

'...

>>> s = student() #

建立例項

>>> print(s.name) #

列印name屬性,因為例項並沒有name屬性,所以會繼續查詢class的name屬性

student

>>> print(student.name) #

列印類的屬性

student

>>> s.name = "

michael"#

給例項繫結name屬性

>>> print(s.name) #

例項的屬性比類的屬性的優先順序更高

michael

>>> print(student.name) #

但是類的屬性並未消失,仍然可以訪問

student

>>> del s.name #

刪除例項的屬性

>>> print(s.name) #

再次呼叫例項的屬性,會從類中繼承

student

從上面的例子可以看出,在編寫程式的時候,千萬不要對例項屬性和類屬性使用相同的名字,因為相同名稱的例項屬性將遮蔽掉所有的類屬性,但是當你刪除掉例項屬性後,再使用相同的名稱,訪問到的將是類屬性。

類的屬性可以增刪(del)改(重新賦值)查(getattr、__dict__、dir()、直接列印),例項的屬性也可以增刪改查,如果實在命令列中那只是臨時的。但是不建議在外邊隨便改。

練習:為了統計學生人數,給累增加乙個屬性,每建立乙個自動加一:

class

student(object):

count =0

def__init__

(self,name):

self.name =name

student.count +=1

測試

if student.count !=0:

print('

測試失敗!')

else

: bart = student('

bart')

if student.count != 1:

print('

測試失敗!')

else

: lisa = student('

bart')

if student.count != 2:

print('

測試失敗!')

else

:

print('

student:

',student.count)

print('

測試通過!

')

結果:

student: 2測試通過!

還可以使用__del__統計減的次數。

小結:

例項屬性屬於各個例項所有,互不干擾;

類舒心屬於類所有,所有例項共享乙個屬性;

Python物件導向 例項屬性和類屬性

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

python 物件導向(四) 例項屬性和類屬性

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

物件導向(三) 例項屬性與類屬性

例項屬性和類屬性 1 概念 2 區別 1 概念上 2 宣告位置 3 訪問方式 4 修改形式 定義學生類,屬性 name,age,gender class student gender 男 類屬性 公共資源 def init self,name,age self.name name self.age ...