一般来说针对于类来说方法的分类:成员方法、静态方法、类方法等
成员方法:使用的时候需要需要先实例化一个对象再调用方法。
静态方法:使用@staticmethod修改的方法
类方法:使用@classmethod修改的方法
使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用。
这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。
静态方法和 类方法区别:
- @staticmethod:无self参数、无cls参数,就跟使用函数一样。
- @classmethod:无self参数,但第一个cls参数。
@staticmethod方法内要调用到这个类的一些属性方法,只能直接类名.属性名或类名.方法名。
@classmethod因为持有cls参数,可以来调用类的属性,类的方法,实例化对象等,避免硬编码。
下面上代码。
[python] view plain copy
1. class MyClass(object):
2. a= 1
3. def f1(self):
4. print 'f1'
5.
6. @staticmethod
7. def static_f1():
8. print 'static_f1'
9. print MyClass.a
10.
11. @classmethod
12. def class_f1(cls):
13. print 'class_f1'
14. print cls.a
15. cls().f1()
16.
17. A.static_f1()
18.A.class_f1()
输出
static_f1
1
class_f1
1
f1