对于python中类的这三种方法,之前一直都不清楚其中的差别,最近阅读了《编写高质量代码 改善python程序的91个建议》,颇受启发,现在写出来分享下。

先看下面的一段代码

 1 # !/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 class A:
 5     name = "A class"
 6 
 7     def instance_method(self):
 8         print "this is instance fun"
 9         print self.name
10 
11     @classmethod
12     def class_method(cls):
13         print "this is class method"
14         print cls.name
15 
16     @staticmethod
17     def static_method():
18         print "this is static method"
19 
20 if __name__=='__main__':
21     a = A()
22     a.instance_method()
23     a.class_method()
24     a.static_method()
25 
26     A.class_method()
27     A.static_method()

其运行结果如下:

this is instance fun
A class
this is class method
A class
this is static method
this is class method
A class
this is static method

简单来说:

实例方法,参数中必须要包含self,  并且可以通过self.XXX来调用或者访问类的方法与属性,但调用该函数必须是类实例后的对象

类方法,由装饰器@classmethod装饰,参数为 类本身(cls), 可以通过cls.XXX来访问类的静态方法与属性, 类或者实例皆可调用

静态方法 由装饰器@staticmethod装饰, 参数与类本身没有关系,也无法访问类的属性与方法  类或者实例皆可调用