Python 中的類方法

Manav Narula 2023年1月30日 2022年5月17日
  1. 在 Python 中使用 classmethod() 函式建立類方法
  2. 在 Python 中使用 @classmethod 裝飾器建立類方法
Python 中的類方法

類充當用於建立物件的預定義結構或藍圖。

我們可以在 Python 中為一個類提供不同的屬性和方法。Python 使我們能夠為類定義各種方法。

首先,我們有可以訪問所有類屬性並通過類例項訪問的例項方法。我們還有一個類的類方法和靜態方法。

本教程將演示 Python 中的類方法。

可以在沒有任何類例項的情況下呼叫類方法。這些方法可以訪問類的狀態。

他們可以訪問類的欄位和屬性,並獲取類本身的引數,而不是例項。

此引數包含類物件,而不是給定類的例項。我們可以使用內建的 classmethod() 函式或 @classmethod 裝飾器在 Python 中建立類方法。

在 Python 中使用 classmethod() 函式建立類方法

classmethod() 函式接受必須轉換為類方法的函式。我們可以在類中定義一個函式,然後將其轉換為類方法。

例如:

class Emp:
    dept = 'python'

    def dept_name(obj):
        print("Department: ", obj.dept)

Emp.dept_name = classmethod(Emp.dept_name)
Emp.dept_name()

輸出:

Department:  python

在上面的示例中,我們使用 classmethod() 函式將 Emp 類的 dept_name() 函式轉換為類方法。我們使用類名訪問這個函式。

然而,這種方法被認為是過時的和非 Pythonic 的。 @classmethod 裝飾器在最新版本的 Python 中是首選。

我們在下面討論這種方法。

在 Python 中使用 @classmethod 裝飾器建立類方法

@classmethod 裝飾器可以放在函式之前以在 Python 中返回類方法。這個裝飾器在函式定義之後被評估。

使用這種方法,我們需要向函式提供 cls 引數作為強制。它表明類方法是指類本身而不是任何例項。

我們將把這個方法與前面例子中的函式一起使用。

class Emp:
    dept = 'python'
    @classmethod
    def dept_name(obj):
        print("Department: ", obj.dept)

Emp.dept_name()

輸出:

Department:  python

應該記住,類方法應用於所有類例項的屬性。這些方法將被子類繼承。

我們可以使用類方法在 Python 中實現過載功能。

請參閱以下示例。

class Emp(object):
    def __init__(self, name = 'Na', age = 10):
        self.name = name
        self.age = age
        
    @classmethod
    def from_str(cls, sample):
        name, age = sample.split(',')
        e1 = cls(name, age)
        return e1

e1 = Emp.from_str('Matt,15')
print(e1.name,e1.age)

輸出:

Matt 15

類方法使用上面示例中的 cls 物件返回一個 Emp 類物件。我們通過拆分字串建立了這個類的一個物件。

靜態方法類似於類方法。我們可以像訪問類方法一樣訪問靜態方法,而無需建立類例項。

但是,靜態函式無法訪問類狀態,也無法修改它。沒有類屬性可以訪問該方法,也不能被任何類方法呼叫。

Author: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

相關文章 - Python Class