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

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

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

什么是实例方法

正如名称所示,实例方法绑定到类实例,并对对象(实例)变量提供的数据/值执行一组操作。如果我们在方法中使用实例变量,这些方法被称为实例方法。它可以修改对象状态。self关键字是与实例方法一起使用的第一个参数,self指的是当前对象。

示例

class Employee:
    # constructor
    def __init__(self, name, department):
        # Instance variable
        self.name = name
        self.department = department

    # instance method to access instance variable
    def show(self):
        print('Name:', self.name, 'Department:', self.department)

obj = Employee('Craig', 'IT')
obj.show()

输出:

Name: Craig Department: IT

解释 –

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

示例2

class Employee:
    # constructor
    def __init__(self, name, department):
        # Instance variable
        self.name = name
        self.department = department

    # instance method to access instance variable
    def show(self):
        print('Name:', self.name, 'Department:', self.department)

obj = Employee('Craig', 'IT')
obj.show()
obj.name = 'Mathew'
obj.department = 'HR'
obj.show()

输出:

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

说明 –

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

类方法

类方法绑定到类,而不是实例。它可以修改类的状态,也就是说可以全局改变类的配置。它只能访问类变量。类方法用于创建工厂方法。类方法的语法有所不同;它们接受 cls 作为参数,指向类本身,而不是self参数。它不能修改实例状态。但是,类方法所做的更改会反映在类的所有实例上。装饰器 @classemethod 或者 classmethod() 可以定义类方法。让我们理解一下以下示例。

示例

class Employee:
    # class variable 
    salary = 25000
    def __init__(self, name, department):
        # Instance variable
        self.name = name
        self.department = department

    # instance method to access instance variable
    def show(self):
        print('Name:', self.name, 'Department:', self.department, 'Salary:', Employee.salary)

    def change_salary(cls, salary):
        cls.salary = salary

obj = Employee('Craig', 'IT')
obj.show()
Employee.change_salary(45000)
obj.show()

输出:

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

解释 –

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

静态方法

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

示例

class Employee:
    @staticmethod
    def sample_method(x):
        print('Inside static method', x*x)

# call static method
Employee.sample_method(10)

# can be called using object
emp = Employee()
emp.sample_method(10)

输出:

Inside static method 100
Inside static method 100

说明 –

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

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

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

我们将使用一些参数描述这些方法之间的一些重要区别。这些区别将帮助您更好地理解面向对象编程的概念。

方法调用

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

修改

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

属性访问

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

类绑定和实例绑定

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

重要备注

  • 要对Python的面向对象编程概念有很好的掌握,我们需要理解类、实例和静态方法。
  • 实例方法使用self参数访问类实例。
  • 类方法不需要类实例。它们使用 cls 参数代替self参数。
  • 静态方法既不使用self,也不使用cls。它们像常规函数一样,但可以通过类名访问。
  • 静态方法和类方法在通信和(在一定程度上)强制开发人员对类设计的意图方面起到作用。它们可以带来维护的好处。

结论

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程