问题: 类中的方法分为哪几种,基础用法是什么?

👇 点击展开/折叠 面试背诵模板(建议先背这个) Python 类中方法分为三种:实例方法、类方法、静态方法。实例方法第一个参数为 self,无装饰器,可访问实例属性和类属性,用于操作对象特有数据。类方法第一个参数为 cls,使用 @classmethod 装饰,无法访问实例属性,可访问类属性,用于工厂模式或修改类状态,支持继承多态。静态方法无强制参数,使用 @staticmethod 装饰,无法访问类或实例属性,本质是归属于类命名空间的工具函数。
---

核心区别速览

类型 首个参数 装饰器 访问实例属性 访问类属性 核心用途
实例方法 self(实例) 无 ✅ 是 ✅ 是 操作对象自身数据
类方法 cls(类) @classmethod ❌ 否 ✅ 是 工厂方法、计数器、类级配置
静态方法 无特殊参数 @staticmethod ❌ 否 ❌ 否(需显式类名.属性) 工具函数、逻辑校验

基础代码示范

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Student:
school = "北京大学" # 类属性

def __init__(self, name):
self.name = name # 实例属性

# 1. 实例方法:操作实例数据
def get_name(self):
return f"学生: {self.name}"

# 2. 类方法:操作类数据(支持多态)
@classmethod
def change_school(cls, new_school):
cls.school = new_school

@classmethod
def create_default(cls): # 工厂方法
return cls("匿名")

# 3. 静态方法:纯工具函数
@staticmethod
def is_valid_age(age):
return 0 < age < 150

调用方式的本质区别

  • 实例方法:必须通过实例调用(stu.get_name()),解释器自动将实例传入 self。
  • 类方法:可通过类或实例调用(Student.change_school() 或 stu.change_school()),解释器自动将类传入 cls。
  • 静态方法:可通过类或实例调用(Student.is_valid_age(18)),无自动传参,形同普通函数。

使用场景选择指南(高频追问)

  • 操作对象属性(如修改 self.name):必须使用实例方法。
  • 需要创建类的实例并希望子类能重写该行为:使用类方法(如 @classmethod def create(cls): return cls())。
  • 仅需处理类级数据(如计数器、配置):优先使用类方法,保留多态性。
  • 验证参数、格式转换等不依赖类内部数据:使用静态方法(如校验手机号格式)。