1. 程式人生 > 其它 >22.類屬性和類方法

22.類屬性和類方法

類屬性和類方法

學習內容

  • 類的結構
  • 類屬性和例項屬性
  • 類方法和靜態方法

01.類的結構

1.1術語——例項

  1. 使用面相物件開發,第1步是設計
  2. 使用類名О建立物件,建立物件的動作有兩步:
    • 1)在記憶體中為物件分配空間
    • 2)呼叫初始化方法__init__為物件初始化
  3. 物件建立後,記憶體中就有了一個物件的實實在在的存在——例項

因此,通常也會把:

  1. 創建出來的物件叫做例項
  2. 建立物件的動作叫做例項化
  3. 物件的屬性叫做例項屬性
  4. 物件呼叫的方法叫做例項方法

在程式執行時:

1.物件各自擁有自己的例項屬性

2.呼叫物件方法,可以通過self.

  • 訪問自己的屬性
  • 呼叫自己的方法

結論

  • 每一個物件
    都有自己獨立的記憶體空間,儲存各自不同的屬性
  • 多個物件的方法,在記憶體中只有一份,在呼叫方法時,需要把物件的引用傳遞到方法內部

1.2 類是一個特殊的物件

Python中—切皆物件:

  • class AAA:定義的類屬於類物件
  • obj1 = AAA()屬於例項物件
  • 在程式執行時,類同樣會被載入到記憶體

  • 在Python中,類是一個特殊的物件——類物件

  • 在程式執行時,類物件在記憶體中只有一份,使用一個類可以創建出很多個物件例項除了封裝例項的屬性和方法外,類物件還可以擁有自己的屬性和方法

    1. 類屬性
    2. 類方法
  • 通過類名.的方式可以訪問類的屬性或者呼叫類的方法

02. 類屬性和例項屬性

2.1概念和使用

  • 類屬性就是給類物件中定義的屬性
  • 通常用來記錄與這個類相關的特徵
  • 類屬性不會用於記錄具體物件的特徵

示例需求

  • 定義一個工具類
  • 每件工具都有自己的name
  • 需求——知道使用這個類,建立了多少個工具物件?

2.2 屬性的獲取機制

  • Python屬性的獲取存在一個向上查詢機制
  • 因此,要訪問類屬性有兩種方式:
    • 1.類名。類屬性
    • 2.物件。類屬性(不推薦)

注意

  • 如果使用物件.類屬性=值賦值語句,只會給物件新增一個屬性,而不會影響到類屬性的值

03.類方法和靜態方法

3.1 類方法

  • 類屬性就是針對類物件定義的屬性
    • 使用賦值語句在class關鍵字下方可以定義類屬性。
    • 類屬性用於記錄與這個類相關的特徵
  • 類方法就是針對類物件定義的方法
    • 在類方法內部可以直接訪問類屬性或者呼叫其他的類方法

語法如下

  • 類方法需要用修飾器@classmethod來標識,告訴直譯器這是一個類方法
  • 類方法的第一個引數應該是cls
    • 哪一個類呼叫的方法,方法內的cls就是哪一個類的引用。
    • 這個引數和例項方法的第一個引數是self類似
    • 提示使用其他名稱也可以,不過習慣使用cls
  1. 通過類名.呼叫類方法,呼叫方法時,不需要傳遞cls引數
  2. 在方法內部
    • 可以通過cls.訪問類的屬性
    • 也可以通過cls.呼叫其他的類方法

3.2 靜態方法

  • 在開發時,如果需要在類中封裝—個方法,這個方法:
    • 不需要訪問例項屬性或者呼叫例項方法
    • 不需要訪問類屬性或者呼叫類方法
  • 這個時候,可以把這個方法封裝成一個靜態方法

語法如下

  • 靜態方法需要用修飾器@staticmethod來標識,告訴直譯器這是一個靜態方法
  • 通過類名.呼叫靜態方法