
classmethod和staticmethod
在遇到的项目代码中,在类里面经常看到这两个装饰器。今天就来具体说说这这两货是干嘛的。
一般情况下,我们定义一个类,里面会有一些属性和方法。我们通过类实例化一个对象,这个对象就有了这些属性和方法,就能正常调用了。
Python中的类也是一个普通对象,如果需要直接使用这个类,例如将类作为参数传递到其他函数中,又希望在实例化这个类之前就能提供某些功能。这个时候就需要用到classmethod和staticmethod了。
这么说吧,staticmethod函数只不过是碰巧存在类中的一个函数而已,既可以通过类来调用,可以实例化一个对象以后,通过对象来调用。
classmethod函数不需要实例化一个对象就能直接用,当我们需要在实例化之前就对类做一些操作,这个时候就可以用到classmethod了。
一般的函数,只有在实例化对象以后才能调用。
用法
看以下的一个简单例子:
1 |
class (object): |
什么时候使用classmethod?什么时候用staticmethod?
查了很多资料,没看到特别好的说明。可能也只有在多写项目代码后才能体会二者的区别。这里就我个人理解做一点简要说明。
有的时候再实例化之前,就需要先和类做一定的交互。这个时候就需要classmethod或者staticmethod。
如果只是不需要访问类中任何实例方法和属性,仅仅作为一个函数实现某种功能,这种情况下适合使用staticmethod。
其他情况,适合使用classmethod。
再简单一点来说,静态方法就是个一般的函数,完全可以放在类的外面,只不过面象对象一般都是通过类来实现,就把这个函数给封到类里面去了。
欢迎补充
关于classmethod和staticmethod的更多细节,欢迎补充。




近期评论