我在写tornado的时候,会定义一大堆的方法在BaseHander(基类)中,而后再具体页面具体类中使用的时候直接self.xxx便可引用这段代码,html
可是当个人tornado项目python代码量达到1K的时候,就会发现BaseHandler过于庞大,有时候都不肯意看这个基类了,不少不一样纬度的操做python
所有都跟垃圾同样堆再里面,例如sql查询操做、权限操做、命名空间绑定操做、验证码操做、URL处理等等一大堆。sql
我发现这样写项目当代码量达到1.5K或者2K的时候我会写不动了,这个时候我就开始整理代码,开始分离,最初分离式将全部SQL操做分离tornado
成Models类,而后再将其余的例如验证码操做分离成工具类, 这里就开始采用到staticmethod了。工具
staticmethod能够在定义一个类的时候,把全部与类相关的操做所有放置在这个类中,使代码获得合理的概括。post
正常状况下staticmethod不须要调用父类中资源(其余method),可是若是须要调用父类中的其余资源,则须要将staticmethod改变成classmethod便可.spa
不须要写self参数htm
不须要实例化类便可直接调用该方法。资源
代码归类get
staticmethod不能调用类中的其余资源
classmethod能够调用类中的其余资源
python 2.x中旧式类对classmethod不支持调用同类中其余资源, 新式类才支持。 python3默认就支持.
定义classmethod 时,要传入cls参数,表示是类方法能够获得该类的其余资源使用权.
参考:
http://pythoncentral.io/difference-between-staticmethod-and-classmethod-in-python/
http://www.wklken.me/posts/2013/12/22/difference-between-staticmethod-and-classmethod-in-python.html