Fork me on GitHub

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)来调用。

 

 

posted @ 2018-09-30 15:35  MisterZZL  阅读(468)  评论(0编辑  收藏  举报