Python静态方法(staticmethod)和类方法(classmthod)
Python静态方法(staticmethod)和类方法(classmthod)
翻了翻之前的笔记,也刚好看到一篇不错的blog,关于静态方法和类方法的,方便以后查阅,就写在这里了,废话不多说,直接上代码。。。
1 class TestMethod(): 2 3 def fun1(self): 4 return '普通方法' 5 6 @staticmethod 7 def fun2(): 8 return 'staticmethod' 9 10 @classmethod 11 def fun3(cls): 12 return 'classmethod' 13 14 a = TestMethod() 15 print(TestMethod.fun1) 16 print(TestMethod.fun2) 17 print(TestMethod.fun3) 18 print('*'*100) 19 20 testmethod1 = TestMethod() 21 print(TestMethod.fun1) 22 print(TestMethod.fun2) 23 print(TestMethod.fun3) 24 print('*'*100) 25 26 testmethod2 = TestMethod() 27 print(TestMethod.fun1) 28 print(TestMethod.fun2) 29 print(TestMethod.fun3) 30 print('*'*100)
运行结果如下:
分析:
这里先理解下函数参数里面的self和cls。这个self和cls是对类或者实例的绑定,对于一般的函数来说我们可以这么调用foo(x),
这个函数就是最常用的,它的工作跟任何东西(类.实例)无关.对于实例方法,我们知道在类里每次定义方法的时候都需要绑定这个实例,就是foo(self, x),
为什么要这么做呢?因为实例方法的调用离不开实例,我们需要把实例自己传给函数,调用的时候是这样的a.foo(x)
(其实是foo(a, x)
).类方法一样,只不过它传递的是类而不是实例,A.class_foo(x)。
注意这里的self和cls可以替换别的参数,但是python的约定是这俩,还是不要改的好.。
对于静态方法其实和普通的方法一样,不需要对谁进行绑定,唯一的区别是调用的时候需要使用a.static_foo(x)
或者A.static_foo(x)
来调用。