Python中的三种方法类型对比

1. 实例方法 (Instance Method)

实例方法是最常见的方法类型,第一个参数默认是self,代表实例本身。

class Student:
    def study(self, subject):  # 实例方法
        print(f"学生正在学习{subject}")

特点:

  • 第一个参数是self,代表实例本身
  • 可以访问和修改实例属性和类属性
  • 需要先创建类的实例才能调用
  • 使用方式:student.study("数学")Student.study(student, "数学")

2. 类方法 (Class Method)

类方法使用@classmethod装饰器,第一个参数是cls,代表类本身。

class Date:
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day
    
    @classmethod
    def from_string(cls, date_string):  # 类方法
        year, month, day = map(int, date_string.split('-'))
        return cls(year, month, day)

特点:

  • 使用@classmethod装饰器
  • 第一个参数是cls,代表类本身
  • 可以访问和修改类属性,不能访问实例属性
  • 可以用于实现替代构造函数
  • 使用方式:Date.from_string("2024-12-09")date.from_string("2024-12-09")

3. 静态方法 (Static Method)

静态方法使用@staticmethod装饰器,不需要传入实例或类引用。

class Calculator:
    @staticmethod
    def add(x, y):  # 静态方法
        return x + y

特点:

  • 使用@staticmethod装饰器
  • 不需要传入selfcls参数
  • 不能访问实例属性或类属性
  • 相当于放在类中的普通函数
  • 使用方式:Calculator.add(1, 2)calculator.add(1, 2)

实例对象除了调用实例方法,还可以调用静态方法和类成员方法。但是类只能调用静态方法或类成员方法。

调用方式对比示例

class Example:
    @classmethod
    def class_method(cls):
        return "这是类方法"
        
    @staticmethod
    def static_method():
        return "这是静态方法"
        
    def instance_method(self):
        return "这是实例方法"

# 1. 通过实例调用
e = Example()
# 实例可以调用所有类型的方法
e.instance_method()    # 正常调用
e.static_method()      # 正常调用
e.class_method()       # 正常调用

# 2. 通过类调用
Example.static_method()    # 正常调用
Example.class_method()     # 正常调用
Example.instance_method()  # 错误!实例方法不能直接通过类调用

主要区别总结:

  1. 参数传递:

    • 实例方法:自动传递实例对象(self)
    • 类方法:自动传递类对象(cls)
    • 静态方法:不自动传递任何参数
  2. 调用方式:

    • 实例方法:需要先创建实例
    • 类方法:可以通过类或实例调用
    • 静态方法:可以通过类或实例调用
  3. 访问权限:

    • 实例方法:可以访问实例属性和类属性
    • 类方法:可以访问类属性,不能访问实例属性
    • 静态方法:不能直接访问实例属性和类属性
All is well
使用 Hugo 构建
主题 StackJimmy 设计