类方法和静态方法
经典的例子
class Date(object): |
classmethod
- 由于python类中只能有一个初始化方法,不能按照不同的情况初始化类。所以类方法常用来模拟多个构造函数(重构构造函数)
- 子类的实例继承了父类的类方法,调用该方法,调用的是子类的方法和类属性
staticmethod
- 一般的使用场景是和类相关的操作,但又不依赖和改变类、实例的状态。
- 例如要实现某一个类的全局计数功能,就可以使用classmethod封装新建实例的操作。
- 子类的实例继承父类的静态方法,调用该方法,调用的是父类的方法和父类的类属性。
- staticmethod 主要用途是限定 namespace,也就是说这个函数虽然是个普通的 function ,但是它只有这个 class 会用到,不适合作为 module level 的 function。这时候就把它作为 staticmethod 。如果不考虑 namespace 的问题的话直接在 module 里面 def function 就行了。