Python中的实例方法、类方法、静态方法和普通方法

 为了辨析它们的差别,写了如下代码: 
 1 class C:
 2 
 3     def self_method(self, a):
 4         return a
 5 
 6     @classmethod
 7     def class_method(cls, a):
 8         return a
 9 
10     @staticmethod
11     def static_method(a):
12         return a
13 
14     def method(a):
15         return a
16 
17 if __name__ == '__main__':
18   c = C()
19   print(c.self_method('self method'))
20   print(c.class_method('class method'))
21   print(c.static_method('static method'))
22   # print(c.method('method')) 运行出错
23   # print(C.self_method('self method')) 运行出错
24   print(C.class_method('class method'))
25   print(C.static_method('static method'))
26   print(C.method('method'))

因此:

  1. 实例方法定义时第一个参数为类的一个实例(self),调用时必须通过实例调用。可以访问实例属性和方法。
  2. 类方法使用@classmethod装饰,第一个参数为类(cls),调用时可以通过类的实例或者类本身来调用。可以访问类属性和方法。
  3. 静态方法使用@staticmethod装饰,调用时可以使用类的实例或者类本身来调用。
  4. 普通方法其实是在类中定义了一个普通函数,调用时必须通过类本身来调用。