Python语言学习讲解二:@staticmethod和@classmethod的作用与区别

一般来说针对于类来说方法的分类:成员方法、静态方法、类方法等

成员方法:使用的时候需要需要先实例化一个对象再调用方法。

静态方法:使用@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

猜你喜欢

转载自blog.csdn.net/windgs_yf/article/details/53183103