编程学习网 > 编程语言 > Python > Python 里的 @staticmethod 和 @classmethod,到底咋用才对?
2025
10-22

Python 里的 @staticmethod 和 @classmethod,到底咋用才对?


在 Python 类里面,有的方法前面加了 @staticmethod,有的加了 @classmethod,这俩装饰器啥意思?区别在哪?到底啥时候用哪个?

今天咱就用轻松的方式聊聊这俩兄弟,顺带结合一些实战经验,帮你彻底搞懂。

1-概念

静态方法 @staticmethod

就是个 “放在类里,但和类没啥直接关系的工具函数”,它既拿不到 self,也拿不到 cls

用大白话说:它就是个普通函数,只是你把它丢进了类的命名空间里,方便组织

类方法 @classmethod

这个就更贴近类本身了。它的第一个参数是 cls,能访问类属性,也能用来写 “备用构造函数”

它跟对象无关,更多是跟类级别的数据打交道。

2-使用场景

我的总结是这样的:

1、适合用 @staticmethod 的场景

当方法逻辑和类有点 “关联”,但完全不需要访问类或实例数据时,可以使用静态方法

比如一些工具方法:


这种方法你放在类外面也能用,但放在类里更整洁,好归类。

2. 适合用 @classmethod 的场景

当你需要访问或修改类属性,或者想写 “替代构造函数” 的时候,可以利用类方法


这样你就能直接通过 DatabaseConnection.from_url("127.0.0.1:3306") 来创建对象,代码变得更优雅。

建议这两个方法别滥用!如果一个方法既不用实例属性,也不用类属性,甚至和类关系不大,那它可能根本不该写在类里。

这时候建议把它单独提出来,模块级函数更干净。

需要说明的是,@classmethod 会自动识别调用它的子类,这点在做继承体系、设计模式的时候特别好用。

3-总结

其实,@staticmethod 和 @classmethod 的区别,核心就两点:

1. 一个完全独立,不知道类和对象的存在

2. 一个和类挂钩,但和具体对象无关

理解了这层差异,在日常工作中,就能优雅地进行编码了。

以上就是“Python 里的 @staticmethod 和 @classmethod,到底咋用才对?的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取