类方法用@classmethod装饰,自动接收cls参数,可访问类属性和方法并支持继承;静态方法用@staticmethod装饰,无隐式参数,仅是逻辑分组的工具函数。

静态方法和类方法都能在不创建实例的情况下被调用,但它们的用途、参数传递方式和访问权限完全不同。
类方法(@classmethod)
类方法的第一个参数固定为 cls,代表当前类本身(不是实例),可用于操作类属性、实现替代构造器或与继承配合使用。
2013年07月06日 V1.60 升级包更新方式:admin文件夹改成你后台目录名,然后补丁包里的所有文件覆盖进去。1.[新增]后台引导页加入非IE浏览器提示,后台部分功能在非IE浏览器下可能没法使用2.[改进]淘客商品管理 首页 列表页 内容页 的下拉项加入颜色来区别不同项3.[改进]后台新增/修改淘客商品,增加淘宝字样的图标和天猫字样图标改成天猫logo图标4.[改进]为统一名称,“分类”改
- 必须用
@classmethod装饰 - 自动接收类对象作为第一个参数(
cls),可访问类变量、其他类方法,也能被子类正确继承和重写 - 常见用途:工厂方法(如
datetime.fromtimestamp())、类级别的状态管理
静态方法(@staticmethod)
静态方法不接收隐式参数(既不是 self 也不是 cls),本质上就是“挂”在类里的普通函数,和类只有命名空间上的关系。
- 必须用
@staticmethod装饰 - 不能直接访问类属性或实例属性,也不参与类/实例的状态管理
- 适合封装逻辑上属于该类、但无需访问类或实例数据的工具函数(比如类型校验、单位换算)
关键区别总结
-
参数不同:类方法有
cls,静态方法无隐式参数 - 访问能力不同:类方法可读写类变量、调用其他类方法;静态方法只能访问传入的参数和局部变量
-
继承行为不同:类方法中
cls指向实际调用它的类(支持多态);静态方法对继承无感知,行为完全固定 -
可读性提示不同:用
@classmethod表明该方法与类结构相关;用@staticmethod表明它只是逻辑分组,无依赖
什么时候选哪个?
- 需要根据类名或子类名做不同处理 → 用
@classmethod - 只是把一个函数放进来方便查找,且不依赖类或实例 → 用
@staticmethod - 不确定要不要访问类信息 → 先写成
@classmethod,更灵活;后续发现真不需要cls,再改静态方法










