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
類物件。我們通過拆分字串建立了這個類的一個物件。
靜態方法類似於類方法。我們可以像訪問類方法一樣訪問靜態方法,而無需建立類例項。
但是,靜態函式無法訪問類狀態,也無法修改它。沒有類屬性可以訪問該方法,也不能被任何類方法呼叫。
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