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