【python】classmethod 和staticmethod

来源:互联网 发布:淘宝不能用手机号登陆 编辑:程序博客网 时间:2024/05/14 15:35

对于classmethod和staticmethod 是之前学类的时候看了一下,知道是类成员方法和静态方法,今天又看到类方法,然后又搜了下,发现自己了解的并不透彻,所以总结一下。

首先classmethod 是类方法,所谓的类方法就是它的第一个参数是本类,是当前的类,它仅仅与类交互,而并不与实例进行交互。所以它是不可以访问实例变量的,但是它可以访问类变量。

对于staticmethod是静态方法,它不用传入self。而且它不可以调用类和实例中的变量。可以理解成它只是在类作用域中的一个函数而已。

普通方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self;
类方法:由类调用; 至少一个cls参数;执行类方法时,自动将调用该方法的类复制给cls;
静态方法:由类调用;无默认参数;(可以类比下静态属性啊)

在python2.4以后 我们可以使用生成器来实现静态方法和类成员方法。

下面是一个例子:

class MyClass:    val1 = 'Value 1'    def __init__(self):        self.val2 = 'Value 2'    @staticmethod    def staticmd():        print '静态方法,无法访问val1和val2'    @classmethod    def classmd(cls):        print '类方法,类:' + str(cls) + ',val1:' + cls.val1 + ',无法访问val2的值'

另外,知乎上有一篇很好的文章来讲解这个,图解很好,可以看下。
https://www.zhihu.com/question/20021164

0 0
原创粉丝点击