由於python是動態語言,根據類建立的例項可以任意繫結屬性。
給例項繫結屬性的方法是通過例項變數,或者通過self變數:
classstudent(object):
def__init__
(self,name):
self.name =name
s = student('
bob') #
新增例項
s.score = 90 #
新增屬性
但是,如果student類本身需要繫結乙個屬性呢?可以直接在class中定義屬性,這種屬性是類屬性,歸student類所有:
>>> classstudent(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()、直接列印),例項的屬性也可以增刪改查,如果實在命令列中那只是臨時的。但是不建議在外邊隨便改。
練習:為了統計學生人數,給累增加乙個屬性,每建立乙個自動加一:
classstudent(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 ...