原文地址:http://blog.csdn.net/caroline_wendy/article/details/23383995
還有一篇:http://blog.csdn.net/carolzhang8406/article/details/6856817
靜態函數(staticmethod), 類函數(classmethod), 成員函數的區別(完全解析)
定義:
靜態函數(@staticmethod): 即靜態方法,主要處理與這個類的邏輯關聯, 如驗證數據;
類函數(@classmethod):即類方法, 更關注於從類中調用方法, 而不是在實例中調用方法, 如構造重載;
成員函數: 實例的方法, 只能通過實例進行調用;
代碼:
# -*- coding: utf-8 -*- #eclipse pydev, python 3.3 #by C.L.Wang class A(object): _g = 1 def foo(self,x): print('executing foo(%s,%s)'%(self,x)) @classmethod def class_foo(cls,x): print('executing class_foo(%s,%s)'%(cls,x)) @staticmethod def static_foo(x): print('executing static_foo(%s)'%x) a = A() a.foo(1) a.class_foo(1) A.class_foo(1) a.static_foo(1) A.static_foo('hi') print(a.foo) print(a.class_foo) print(a.static_foo)
輸出:
具體應用:
比如日期的方法, 可以通過實例化(__init__)進行數據輸出;
可以通過類方法(@classmethod)進行數據轉換;
可以通過靜態方法(@staticmethod)進行數據驗證;
代碼:
輸出:
12*11*2014
11*13*2014
False
False
參考:
http://stackoverflow.com/questions/12179271/python-classmethod-and-staticmethod-for-beginner
http://stackoverflow.com/questions/136097/what-is-the-difference-between-staticmethod-and-classmethod-in-python