Python成员方法分三类:实例方法(首参self,操作实例状态)、类方法(@classmethod+cls,操作类属性/工厂函数)、静态方法(@staticmethod,无绑定的工具函数)。

Python 中的成员方法主要指定义在类内部、用于操作实例或类本身的方法,它们根据第一个参数和装饰器不同,分为三种:实例方法、类方法和静态方法。区别核心在于调用方式、可访问的数据范围以及用途定位。
实例方法(Instance Method)
最常见的一类方法,第一个参数必须是 self,代表当前实例对象。它能自由访问和修改实例属性,也能调用其他实例方法或类属性。
- 只能通过实例调用(如
obj.method()),不能直接用类名调用(Class.method()会报错) - 可读写实例变量(
self.x)、访问类变量(self.__class__.y或type(self).y) - 适合实现与具体对象状态相关的逻辑,比如计算某个学生的总分、修改用户昵称
类方法(Class Method)
用 @classmethod 装饰,第一个参数是 cls,代表当前类(而非实例)。它无法访问实例属性,但可以操作类属性、创建新实例或作为替代构造函数。
- 可通过类名或实例调用(
Class.method()或obj.method()),实际接收的是类对象 - 常用于工厂方法,比如
datetime.fromtimestamp()就是类方法 - 修改类变量安全(
cls.count += 1),但不能使用self.xxx
静态方法(Static Method)
用 @staticmethod 装饰,不强制传入 self 或 cls。本质上是“寄居在类里的普通函数”,跟类或实例都无绑定关系。
立即学习“Python免费学习笔记(深入)”;
- 调用方式灵活:类名或实例均可(
Class.func()或obj.func()) - 不能直接访问实例属性或类属性(除非显式写类名,如
MyClass.value) - 适合放一些逻辑上相关、但无需访问类/实例状态的工具函数,比如日期格式校验、字符串预处理
选哪种方法,关键看这个功能是否需要依赖实例状态(选实例方法)、是否要统一操作类本身(选类方法)、或者只是借个命名空间放工具函数(选静态方法)。不复杂但容易忽略细节。











