classmethod和staticmethod的区别

嗯,说点什么!

我在写tornado的时候,会定义一大堆的方法在BaseHander(基类)中,而后再具体页面具体类中使用的时候直接self.xxx便可引用这段代码,html

可是当个人tornado项目python代码量达到1K的时候,就会发现BaseHandler过于庞大,有时候都不肯意看这个基类了,不少不一样纬度的操做python

所有都跟垃圾同样堆再里面,例如sql查询操做、权限操做、命名空间绑定操做、验证码操做、URL处理等等一大堆。sql

 

在何时使用staticmethod?

 

我发现这样写项目当代码量达到1.5K或者2K的时候我会写不动了,这个时候我就开始整理代码,开始分离,最初分离式将全部SQL操做分离tornado

成Models类,而后再将其余的例如验证码操做分离成工具类, 这里就开始采用到staticmethod了。工具

 

staticmethod能够在定义一个类的时候,把全部与类相关的操做所有放置在这个类中,使代码获得合理的概括post

 

在何时使用classmethod?

正常状况下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

相关文章
相关标签/搜索