一、類的定義:
在一個類中,除了可以包含前面所說的屬性,還可以包含各種方法。
屬性對應一個類可以用來保存哪些數據,而方法對應一個類可以支持哪些操作(即數據處理)。
小提示:
類中的屬性對應前面所學習的變量,而類中的方法對應前面所學習的函數。通過類,可以把數據和操作封裝在一起,從而使得程序結構更加清晰,這也就是所謂的類的封裝性。
類的定義形式:
class 類名:
語句1
語句2
... ...
語句N
提示:類體的各語句需要采用縮進方式以表示它們是類中的語句。
例:創建Student類對象
class Student: #定義一個名字為Student的類 pass #一個空語句,起到占位作用,表示Student類中沒有任何屬性和方法 if __name__=='__main__': stu=Student() #創建Student類的對象,並將創建的對象賦給變量stu print(stu) #輸出stu
輸出:<__main__.Student object at 0x000002300639F4E0>
提示:每次創建對象時,系統都會在內存中選擇一塊區域分配給對象,每次選擇的內存通常是不一樣的。因此,實際運行時會看到一個不同的stu對象地址。
二、類屬性的定義
我們可以直接在定義類時指定該類的屬性,即類屬性。例如:
class Student: #定義Student類
name='Unknown' #定義Student類中有一個name屬性
對類屬性的訪問,既可以直接通過類名訪問,也可以通過該類的對象訪問,訪問方式為:
類名或對象名.屬性名
例:類屬性的訪問示例
1 class Student: #定義Student類 2 name='Unknown' #定義Student類中有一個name屬性 3 if __name__=='__main__': 4 print('第4行輸出:',Student.name) 5 stu1=Student() #創建Student類對象stu1 6 stu2=Student() #創建Student類對象stu2 7 print('第7行輸出:stu1 %s,stu2 %s'%(stu1.name,stu2.name)) 8 Student.name='未知' #將Student的類屬性name賦為“未知” 9 print('第9行輸出:',Student.name) 10 print('第10行輸出:stu1 %s,stu2 %s'%(stu1.name,stu2.name)) 11 stu1.name='李曉明' #將stu1的name屬性賦值為“李曉明” 12 stu2.name='馬紅' #將stu2的name屬性賦值為“馬紅” 13 print('第13行輸出:',Student.name) 14 print('第14行輸出:stu1 %s,stu2 %s'%(stu1.name,stu2.name)) 15 Student.name='學生' #將Student的類屬性name賦為“學生” 16 print('第16行輸出:',Student.name) 17 print('第17行輸出:stu1 %s,stu2 %s'%(stu1.name,stu2.name))
第4行輸出: Unknown
第7行輸出:stu1 Unknown,stu2 Unknown
第9行輸出: 未知
第10行輸出:stu1 未知,stu2 未知
第13行輸出:未知
第14行輸出:stu1 李曉明,stu2 馬紅
第16行輸出:學生
第17行輸出:stu1 李曉明,stu2 馬紅
三、為對象動態綁定新屬性
Python作為一種動態語言,除了可以在定義類時指定類屬性外,
還可以動態地為已經創建的對象綁定新的屬性。
例:為對象動態綁定新屬性示例。
1 class Student: #定義Student類 2 name='Unknown' #定義Student類中有一個name屬性 3 if __name__=='__main__': 4 stu1=Student() #定義Student類對象stu1 5 stu2=Student() #定義Student類對象stu2 6 stu1.age=19 #為對象stu1動態綁定新的屬性age 7 print('stu1姓名:%s,年齡:%d'%(stu1.name,stu1.age)) #輸出姓名和年齡 8 #print('stu2年齡:'%stu2.age) #取消注釋則該語句會報錯 9 #print('使用類名訪問年齡屬性:'%Student.age) #取消注釋則該語句會報錯