类方法自动绑定类(cls),静态方法完全不绑定类或实例;类方法用于构造函数、操作类变量,静态方法仅作无状态工具函数。

类方法会自动绑定类,静态方法完全不绑定
类方法(@classmethod)第一个参数固定为 cls,Python 自动把当前类对象传给它,无论通过类名还是实例调用,cls 指向的都是定义该方法的类(支持继承时的动态绑定)。静态方法(@staticmethod)则彻底脱离类和实例,不接收隐式参数,就像一个普通函数,只是逻辑上归属在类的命名空间里。
调用方式相同,但背后机制不同
两者都可通过类名或实例调用,例如 MyClass.method() 或 obj.method(),表面看不出区别。但底层行为差异明显:
- 类方法调用时,解释器会查找方法所在的类(含父类),把该类作为 cls 绑定传入;
- 静态方法调用时,解释器不做任何绑定,直接执行函数体,等价于从模块中调用一个独立函数。
典型使用场景有明确分工
类方法常用于替代构造函数(如 from_string、from_json),或操作类变量、实现工厂模式;静态方法适合放那些和类有关联、但不需要访问类或实例状态的工具函数,比如数据校验、格式转换:
功能列表:底层程序与前台页面分离的效果,对页面的修改无需改动任何程序代码。完善的标签系统,支持自定义标签,公用标签,快捷标签,动态标签,静态标签等等,支持标签内的vbs语法,原则上运用这些标签可以制作出任何想要的页面效果。兼容原来的栏目系统,可以很方便的插入一个栏目或者一个栏目组到页面的任何位置。底层模版解析程序具有非常高的效率,稳定性和容错性,即使模版中有错误的标签也不会影响页面的显示。所有的标
- ✅ 类方法:修改类变量、创建本类新实例、封装与继承相关的逻辑
- ✅ 静态方法:字符串解析、单位换算、正则匹配等纯计算逻辑
- ❌ 不要用静态方法去访问 cls 或 self,它根本收不到
- ❌ 不要用类方法做无状态工具函数,徒增不必要的 cls 参数
本质是描述符协议决定的行为差异
类方法和静态方法都是通过描述符协议实现的。当你访问 MyClass.cm 时,classmethod 的 __get__ 方法被触发,返回一个绑定了类的可调用对象;而 staticmethod 的 __get__ 直接返回原函数本身,不做任何包装。这也是为什么静态方法“看起来像普通函数”的根本原因——它确实被设计成绕过绑定机制的。
立即学习“Python免费学习笔记(深入)”;









