亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

Python 類屬性和實例屬性

下表列出了 4 個常見的明星人物:

姓名 年齡
周潤發 58
成龍 55
劉德華 53
周星馳 54

進行歸納總結:

  • 這些人物具有較高的知名度,把這些人物歸類為明星;
  • 每個明星兩個屬性:姓名和年齡。明星這個群體具有一個屬性:數量,在這張表格中,明星的數量是 4;
  • 姓名和年齡等屬性是用于描述具體的一個對象(例如:周潤發),而人物的數量是用于描述明星這個類別。

如果使用面向對象技術對以上實體進行描述,周潤發、成龍、劉德華、周星馳等人物是對象,描述這些知名人物的抽象是類,需要區分位于不同層次的屬性:

  • 隸屬于具體對象的屬性,例如:姓名、年齡
  • 隸屬于類的屬性,例如:人物數量

本節講解在 Python 中這兩個層次上的屬性的概念和使用。

1. 實例屬性

實例屬性是隸屬于具體對象的屬性,用于描述具體的對象。示例代碼如下:

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 創建一個對象 zhou
    • 在第 5 行,設置對象 zhou 的屬性 name,該屬性為實例屬性
    • 在第 6 行,設置對象 zhou 的屬性 age,該屬性為實例屬性
    • 在第 7 行,打印對象 zhou 的屬性 name 和 age
  • 在第 9 行,使用類 Person 創建一個對象 liu
    • 在第 10 行,設置對象 liu 的屬性 name,該屬性為實例屬性
    • 在第 11 行,設置對象 liu 的屬性 age,該屬性為實例屬性
    • 在第 12 行,打印對象 liu 的屬性 name 和 age

程序運行輸出如下:

name = Zhou, age = 58
name = Liu, age = 53

2. self 參數

在前面的例子中,存在兩個對象 zhou 和 liu,通過 zhou.nameliu.name 這樣的形式訪問實例屬性。上面的例子存在一個顯著的問題:

  • 在第 7 行,使用 print(‘name = %s, age = %d’ % (zhou.name, zhou.age)) 打印對象 zhou
  • 在第 12 行,使用 print(‘name = %s, age = %d’ % (liu.name, liu.age)) 打印對象 liu

以上這兩行代碼是雷同的,功能是重復的。Python 允許在類中定義方法,訪問對象的屬性,語法如下:

class 類名:
    def 方法(self):
        self.屬性

在類中定義的方法,第一個參數 self 指向調用該方法的對象,在方法中通過 “self.屬性” 這樣的形式訪問對象的實例屬性。示例代碼如下:

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 參數指向調用 introduce 方法的對象
    • 在第 3 行,introduce 方法通過 self.name 和 self.age 訪問對象的屬性
  • 在第 5 行,使用類 Person 創建一個對象 zhou
    • 在第 6 行,設置對象 zhou 的屬性 name,該屬性為實例屬性
    • 在第 7 行,設置對象 zhou 的屬性 age,該屬性為實例屬性
    • 在第 8 行,調用對象 zhou 的方法 introduce,對象 zhou 被傳遞給方法 introduce,作為 self 參數,在執行 introduce 時,self 參數指向對象 zhou
  • 在第 10 行,使用類 Person 創建一個對象 liu
    • 在第 11 行,設置對象 liu 的屬性 name,該屬性為實例屬性
    • 在第 12 行,設置對象 liu 的屬性 age,該屬性為實例屬性
    • 在第 13 行,調用對象 liu 的方法 introduce,對象 liu 被傳遞給方法 introduce,作為 self 參數,在執行 introduce 時,self 參數指向對象 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 對象的數量

  • 在第 4 行,使用類 Person 創建一個對象 zhou

    • 在第 5 行,設置對象 zhou 的屬性 name,該屬性為實例屬性
    • 在第 6 行,設置對象 zhou 的屬性 age,該屬性為實例屬性
  • 因為新創建了一個對象 zhou

    • 在第 7 行,訪問 Person 的類屬性 count,對其增加 1
    • 在第 8 行,打印 Person 的類屬性 count
  • 在第 10 行,使用類 Person 創建一個對象 liu

    • 在第 11 行,設置對象 liu 的屬性 name,該屬性為實例屬性
    • 在第 12 行,設置對象 liu 的屬性 age,該屬性為實例屬性
  • 因為新創建了一個對象 liu

    • 在第 13 行,訪問 Person 的類屬性 count,對其增加 1
    • 在第 14 行,打印 Person 的類屬性 count

程序運行輸出如下:

Person.count = 1
Person.count = 2