类方法、静态方法和实例方法之间的区别

2024 年 8 月 29 日 | 5 分钟阅读

在本教程中,我们将学习类方法、静态方法和实例方法。这些方法是 Python 面向对象编程的核心概念。每个 Python 爱好者都应该熟悉这些方法以及如何根据需要使用它们。让我们简要介绍一下实例方法、类方法和静态方法。

什么是实例方法?

顾名思义,实例方法绑定到类实例,并对对象(实例)变量提供的数据/值执行一系列操作。如果我们使用方法中的实例变量,则这些方法称为实例方法。它可以修改对象的状态。**self** 关键字是使用实例方法的第一个参数,**self** 指的是当前对象。

示例 -

输出

Name: Craig Department: IT

解释 -

我们在上面的代码中定义了创建实例变量的构造函数,使用了 Python 对象。在 **show()** 函数中,我们使用 self 关键字访问了两个变量。我们可以使用以下代码访问和修改实例变量。

示例 - 2

输出

Name: Craig Department: IT
Name: Mathew Department: HR

解释 -

我们可以看到我们访问了实例变量并更改了它的值。在 **show()** 函数中,实例方法打印了更新后的值。

类方法

类方法绑定到类,而不是实例。它可以修改类状态,意味着它可以全局更改类配置。它只能访问类变量。类方法用于创建工厂方法。类方法的语法不同;它不接受 self 参数,而是接受指向类的 **cls** 参数。它不能修改实例状态。然而,类方法所做的更改会反映到该类的所有实例。**@classemethod** 装饰器或 **classmethod()** 定义类方法。让我们通过以下示例来理解。

示例 -

输出

Name: Craig Department: IT Salary: 25000
Name: Craig Department: IT Salary: 45000

解释 -

在上面的代码中,我们定义了类变量 name salary 和类方法 **change_salary()**。**change_salary()** 函数访问了类变量 salary,并用于修改所有员工的 salary。我们在对象创建部分也做了同样的事情。

静态方法

静态方法既不使用 self 也不使用 cls 参数;它们是通用的实用方法,用于独立执行任务。Python 中的静态方法与 Java 和 C++ 中的方法类似,它们不能修改类或实例的行为。**@staticmethod** 装饰器或 **staticmethod()** 方法定义了静态方法。让我们看下面的示例。静态方法可以使用类名和类的实例来访问。

示例 -

输出

Inside static method 100
Inside static method 100

解释 -

我们在上面的方法中创建了一个接受 x 作为参数的静态方法。我们计算了它与自身的乘法,并使用类名和实例访问了静态方法。

让我们来理解类方法、实例方法和静态方法之间的区别。

类方法 vs. 静态方法 vs. 实例方法

我们将使用一些参数来描述这些方法之间的一些重要区别。这些区别将帮助您更深入地理解 OOP 概念。

方法调用

  • 实例方法可以使用类的对象/实例来访问。
  • 类方法和静态方法可以使用类名和类的对象来访问。

修改

  • 实例方法可以修改实例变量的行为。
  • 类方法可以修改类的行为,这会反映到整个类,以及类的所有实例。
  • 静态方法独立执行其任务。它们与类方法或实例方法没有任何交互。

属性访问

  • 实例方法可以访问类变量和实例变量。
  • 类方法可以访问类变量。
  • 静态方法无法访问类变量和静态变量。因此,它不能改变类或实例的状态。

类绑定和实例绑定

  • 实例方法与类的对象绑定,因此我们可以通过对象访问它们。
  • 最佳实践是使用类名访问类方法和静态方法,因为它们绑定到类。

重要说明

  • 要熟练掌握 Python 的 OOP 概念,我们需要理解类方法、实例方法和静态方法。
  • 实例方法使用 self 参数来访问类实例。
  • 类方法不需要类实例。它们使用 **cls** 参数而不是 self 参数。
  • 静态方法既不使用 self 也不使用 cls。它们作用于普通函数,但可以通过类名访问。
  • 静态方法和类方法可以相互通信,并在一定程度上强制执行开发者关于类设计的意图。这可以带来维护上的好处。

结论

我们已经讨论了类方法、静态方法和实例方法之间的一些重要区别。我们还探讨了示例,并展示了使用这些方法的不同场景。