1. 程式人生 > >Python中的@staticmethod和@classmethod的區別

Python中的@staticmethod和@classmethod的區別

一直搞不明白,類方法和靜態方法的區別,特意研究了一下,跟大家分享一下。 為了方便大家瞭解兩者的差別,以下的示例程式碼將有助於發現其中的差別: ``` class A(object): 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作為第一個引數隱式傳遞。 ``` a.foo(1) # executing foo(<__main__.A object at 0xb7dbef0c>,1) ``` 使用classmethods時,物件例項的類作為第一個引數而不是隱式傳遞self。 ``` a.class_foo(1) # executing cl