对于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装饰, 参数与类本身没有关系,也无法访问类的属性与方法 类或者实例皆可调用