Python 類屬性和實(shí)例屬性
下表列出了 4 個(gè)常見的明星人物:
姓名 | 年齡 |
---|---|
周潤(rùn)發(fā) | 58 |
成龍 | 55 |
劉德華 | 53 |
周星馳 | 54 |
進(jìn)行歸納總結(jié):
- 這些人物具有較高的知名度,把這些人物歸類為明星;
- 每個(gè)明星兩個(gè)屬性:姓名和年齡。明星這個(gè)群體具有一個(gè)屬性:數(shù)量,在這張表格中,明星的數(shù)量是 4;
- 姓名和年齡等屬性是用于描述具體的一個(gè)對(duì)象(例如:周潤(rùn)發(fā)),而人物的數(shù)量是用于描述明星這個(gè)類別。
如果使用面向?qū)ο蠹夹g(shù)對(duì)以上實(shí)體進(jìn)行描述,周潤(rùn)發(fā)、成龍、劉德華、周星馳等人物是對(duì)象,描述這些知名人物的抽象是類,需要區(qū)分位于不同層次的屬性:
- 隸屬于具體對(duì)象的屬性,例如:姓名、年齡
- 隸屬于類的屬性,例如:人物數(shù)量
本節(jié)講解在 Python 中這兩個(gè)層次上的屬性的概念和使用。
1. 實(shí)例屬性
實(shí)例屬性是隸屬于具體對(duì)象的屬性,用于描述具體的對(duì)象。示例代碼如下:
class Person:
pass
zhou = Person()
zhou.name = 'Zhou'
zhou.age = 58
print('name = %s, age = %d' % (zhou.name, zhou.age))
liu = Person()
liu.name = 'Liu'
liu.age = 53
print('name = %s, age = %d' % (liu.name, liu.age))
- 在第 1 行,定義了類 Person
- 在第 4 行,使用類 Person 創(chuàng)建一個(gè)對(duì)象 zhou
- 在第 5 行,設(shè)置對(duì)象 zhou 的屬性 name,該屬性為實(shí)例屬性
- 在第 6 行,設(shè)置對(duì)象 zhou 的屬性 age,該屬性為實(shí)例屬性
- 在第 7 行,打印對(duì)象 zhou 的屬性 name 和 age
- 在第 9 行,使用類 Person 創(chuàng)建一個(gè)對(duì)象 liu
- 在第 10 行,設(shè)置對(duì)象 liu 的屬性 name,該屬性為實(shí)例屬性
- 在第 11 行,設(shè)置對(duì)象 liu 的屬性 age,該屬性為實(shí)例屬性
- 在第 12 行,打印對(duì)象 liu 的屬性 name 和 age
程序運(yùn)行輸出如下:
name = Zhou, age = 58
name = Liu, age = 53
2. self 參數(shù)
以上這兩行代碼是雷同的,功能是重復(fù)的。Python 允許在類中定義方法,訪問對(duì)象的屬性,語(yǔ)法如下:
class 類名:
def 方法(self):
self.屬性
在類中定義的方法,第一個(gè)參數(shù) self 指向調(diào)用該方法的對(duì)象,在方法中通過 “self.屬性” 這樣的形式訪問對(duì)象的實(shí)例屬性。示例代碼如下:
class Person:
def introduce(self):
print('name = %s, age = %d' % (self.name, self.age))
zhou = Person()
zhou.name = 'Zhou'
zhou.age = 58
zhou.introduce()
liu = Person()
liu.name = 'Liu'
liu.age = 53
liu.introduce()
- 在第 1 行,定義了類 Person
- 在第 2 行,定義了類 Person 的方法 introduce,introduce 的 self 參數(shù)指向調(diào)用 introduce 方法的對(duì)象
- 在第 3 行,introduce 方法通過 self.name 和 self.age 訪問對(duì)象的屬性
- 在第 5 行,使用類 Person 創(chuàng)建一個(gè)對(duì)象 zhou
- 在第 6 行,設(shè)置對(duì)象 zhou 的屬性 name,該屬性為實(shí)例屬性
- 在第 7 行,設(shè)置對(duì)象 zhou 的屬性 age,該屬性為實(shí)例屬性
- 在第 8 行,調(diào)用對(duì)象 zhou 的方法 introduce,對(duì)象 zhou 被傳遞給方法 introduce,作為 self 參數(shù),在執(zhí)行 introduce 時(shí),self 參數(shù)指向?qū)ο?zhou
- 在第 10 行,使用類 Person 創(chuàng)建一個(gè)對(duì)象 liu
- 在第 11 行,設(shè)置對(duì)象 liu 的屬性 name,該屬性為實(shí)例屬性
- 在第 12 行,設(shè)置對(duì)象 liu 的屬性 age,該屬性為實(shí)例屬性
- 在第 13 行,調(diào)用對(duì)象 liu 的方法 introduce,對(duì)象 liu 被傳遞給方法 introduce,作為 self 參數(shù),在執(zhí)行 introduce 時(shí),self 參數(shù)指向?qū)ο?liu
3. 類屬性
類屬性是隸屬于類的屬性,用于描述類的特征。
在 Python 中,類屬性在類中的定義如下所示:
class 類名:
類屬性 = 值
示例代碼如下:
class Person:
count = 0
zhou = Person()
zhou.name = 'Zhou'
zhou.age = 58
Person.count = Person.count + 1
print('Person.count = %d' % Person.count)
liu = Person()
liu.name = 'Liu'
liu.age = 53
Person.count = Person.count + 1
print('Person.count = %d' % Person.count)
-
在第 1 行,定義了類 Person
-
在第 2 行,定義了類 Person 的屬性 count,該屬性是類屬性,描述了 Person 對(duì)象的數(shù)量
-
在第 4 行,使用類 Person 創(chuàng)建一個(gè)對(duì)象 zhou
- 在第 5 行,設(shè)置對(duì)象 zhou 的屬性 name,該屬性為實(shí)例屬性
- 在第 6 行,設(shè)置對(duì)象 zhou 的屬性 age,該屬性為實(shí)例屬性
-
因?yàn)樾聞?chuàng)建了一個(gè)對(duì)象 zhou
- 在第 7 行,訪問 Person 的類屬性 count,對(duì)其增加 1
- 在第 8 行,打印 Person 的類屬性 count
-
在第 10 行,使用類 Person 創(chuàng)建一個(gè)對(duì)象 liu
- 在第 11 行,設(shè)置對(duì)象 liu 的屬性 name,該屬性為實(shí)例屬性
- 在第 12 行,設(shè)置對(duì)象 liu 的屬性 age,該屬性為實(shí)例屬性
-
因?yàn)樾聞?chuàng)建了一個(gè)對(duì)象 liu
- 在第 13 行,訪問 Person 的類屬性 count,對(duì)其增加 1
- 在第 14 行,打印 Person 的類屬性 count
程序運(yùn)行輸出如下:
Person.count = 1
Person.count = 2