您的位置:首页 > 编程语言 > Python开发

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

2016-11-16 09:22 836 查看

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

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

静态方法:使用@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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息