我在寫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