Python 類中的方法分類以及特點詳解 [OOP][實例方法][類方法][靜態方法][方法的調用方式][實例方法的“綁定”調用方式][實例方法的“非綁定”調用方式]

您的“關注”和“點贊”,是信任,是認可,是支持,是動力…

如意見相佐,可留言。
本人必將竭盡全力試圖做到準確和全面,終其一生進行修改補充更新。

1 Python 類中的方法分類概述

  • 實例方法:在類中定義的方法通常默認都是實例方法,包括構造方法。
  • 類方法:至少要有一個形式參數,通常命名爲 cls,Python 會自動將類本身(注意:不是類對象)綁定給 cls 參數,無需顯式爲 cls 傳參;並且類方法需要用 @classmethod 修飾符進行修飾。
  • 靜態方法:靜態方法需要使用 @staticmethod 修飾符進行修飾。

2 Python 實例方法

2.1 實例方法概述

在類中定義的方法通常默認都是實例方法,包括構造方法。

實例方法最大的特點就是,它最少也要包含一個 self 參數,並且作爲第一個參數,用於綁定(Python 會自動完成綁定)調用此方法的實例對象(調用者)。

舉例如下所示:

# 定義類
class Demo:
    # 構造方法也是實例方法
    def __init__(self):
        print('構造方法被執行了。')

    # 定義 info() 實例方法
    def info(self):
        print('info() 實例方法被執行了。')

2.2 實例方法的調用方式

(1)“綁定”方式

用類的實例對象調用類成員的方式稱爲“綁定方式”。

實例方法通常會用類對象直接調用。

舉例如下所示:

# 定義類
class Demo:
    # 構造方法也是實例方法
    def __init__(self):
        print('構造方法被執行了。')

    # 定義 info() 實例方法
    def info(self):
        print('info() 實例方法被執行了。')


demo = Demo()  # 創建 Demo 類的實例對象
demo.info()  # 用 Demo 類的實例對象調用實例方法 info()

運行結果:

構造方法被執行了。
info() 實例方法被執行了。

(2)“非綁定”方式

Python 中允許使用類名直接調用實例方法,但必須手動爲該實例方法的第一個 self 參數傳遞參數,這種調用方法的方式被稱爲“非綁定方式”。

舉例如下所示:

# 定義類
class Demo:
    # 構造方法也是實例方法
    def __init__(self):
        print('構造方法被執行了。')

    # 定義 info() 實例方法
    def info(self):
        print('info() 實例方法被執行了。')


demo = Demo()  # 創建 Demo 類的實例對象
Demo.info(demo)  # 使用類名 Demo 直接調用實例方法 info(),並手動爲實例方法 info() 傳入實例對象(demo)

運行結果:

構造方法被執行了。
info() 實例方法被執行了。

3 Python 類方法

3.1 類方法概述

Python 類方法,至少要有一個形式參數,通常命名爲 cls,Python 會自動將類本身(注意:不是類對象)綁定給 cls 參數,無需顯式爲 cls 傳參;並且類方法需要用 @classmethod 修飾符進行修飾。

舉例如下所示:

# 定義類
class Demo:
    # 構造方法也是實例方法
    def __init__(self):
        print('構造方法被執行了。')

    # 定義 info() 類方法
    @classmethod
    def info(cls):
        print('info() 類方法被執行了。')

3.2 類方法的調用

  • 建議:使用類名直接調用,因爲Python 會自動將類本身(注意:不是類對象)綁定給 cls 參數,無需顯式爲 cls 傳參。
  • 不建議:使用實例對象來調用。

舉例如下所示:

# 定義類
class Demo:
    # 構造方法也是實例方法
    def __init__(self):
        print('構造方法被執行了。')

    # 定義 info() 類方法
    @classmethod
    def info(cls):
        print('info() 類方法被執行了。')


Demo.info()  # 類名直接調用類方法

運行結果:

info() 類方法被執行了。

4 Python 靜態方法

4.1 靜態方法概述

靜態方法需要使用 @staticmethod 修飾符進行修飾。

在類的靜態方法中無法調用任何類屬性和類方法,因爲靜態方法沒有類似 self、cls 這樣的特殊參數,因此 Python 解釋器不會對它包含的參數做任何類或對象的綁定。

舉例如下所示:

# 定義類
class Demo:
    # 構造方法也是實例方法
    def __init__(self):
        print('構造方法被執行了。')

    # 定義 info() 靜態方法
    @staticmethod
    def info():
        print('info() 靜態方法被執行了。')

4.2 靜態方法的調用

靜態方法的調用,既可以使用類名直接調用,也可以使用類對象調用。

舉例如下所示:

# 定義類
class Demo:
    # 構造方法也是實例方法
    def __init__(self):
        print('構造方法被執行了。')

    # 定義 info() 靜態方法
    @staticmethod
    def info():
        print('info() 靜態方法被執行了。')


Demo.info()  # 類名直接調用靜態方法

# 使用實例對象調用靜態方法
demo = Demo()  # 創建實例對象
demo.info()

運行結果:

info() 靜態方法被執行了。
構造方法被執行了。
info() 靜態方法被執行了。

【友情鏈接】

微信公衆號:碼農阿杰

博客園

【參考資料】

Python 官網

Python 3.8.2 documentation

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章