python中的静态方法和类方法

来源:互联网 发布:一个域名对应几个网站 编辑:程序博客网 时间:2024/05/16 14:29

    唉~今天为了python中静态方法和类方法差了一下午啊,最后在官方文档中纠结了半天,最后终于知道了这两种函数有什么区别。唉~怎么这么纠结啊~果然对一门语言深入学习是很蛋疼的事情啊,还好暂时不打算深入学习python。

    在一个类方法中,如果使用self(其实可以使用其他名字代替,例如this,使用self只是一种约定,目的是为了统一代码风格,增强可读性)作为第一个参数,那么这个函数将视为这个类中的实例方法,通过类不能直接访问。如果我们将第一个参数设为cls(同self一样,也是一种约定),那么这个函数在类中将被视为类函数,同时,这个函数需要使用classmethod函数来将其转换成真正的类方法(现在一般都是用decorator)。如果我们并不将类或者实例作为第一个参数,那么这个函数将被视为静态函数,同时,与类方法类似,我们需要使用staticmethod函数将这个函数转换成真正的静态方法。

    所以,我们可以看出,在定义静态方法的时候,我们并没有像类方法或者实例方法一样,将类或者实例作为第一个参数传递个方法,而区别也就在这里了。因为在类方法中的第一个参数是类,因此,我们可以在函数中使用这个引用。也就是说,当我们需要使用类的引用的时候我们需要使用类方法。不需要使用类的引用的时候则可以使用静态方法。就如同官方文档中《Descriptor HowTo Guide》中的“Static Methods and Class Methods”中所讲的:

    对静态方法:“there may be useful functions which are conceptually related but do not depend on the data.”

    对类方法:“This behavior is useful whenever the function only needs to have a class reference and does not care about any underlying data.”

    当然,这并不是绝对的,我们同样可以使用静态方法完成类方法所要完成的,毕竟,我们可以在静态方法中定义一个变量作为类的引用。所以我觉得类方法只是一个使用类引用的静态方法,是一种类似语法糖的存在。也许有人会说,并没有什么说静态方法与类绑定了,而却到处都有说类方法与类绑定了。不过我认为,因为不论是静态方法还是类方法其实都是生存在统一命名空间之中的,也就是说它们都是与所在类有一种绑定的关系。只不过由于类方法的第一个参数是类,所以类方法对类存在着另一种绑定的关系。

   初学python,个人观点,不喜勿喷,错误请指正,共同学习探讨。

原创粉丝点击