资讯专栏INFORMATION COLUMN

Python:staticmethod 和 classmethod的比较

frank_fun / 2918人阅读

摘要:而呢,它没有默认的第一个输入变量。它跟我们在一个空白的里写的一个普通的函数没有任何实质的区别。唯一的不同就是你要通过类或者实例来它。

class A(object):
    def foo(self, x):
        print "executing foo(%s, %s)" % (self, x)

    @classmethod
    def class_foo(cls, x):
        print "executing class_foo(%s, %s)" % (cls, x)

    @staticmethod
    def static_foo(x):
        print "executing static_foo(%s)" % x    

a = A()

看一下输出:
常规定义的方法:

a.foo(1)
# executing foo(<__main__.A object at 0xb7dbef0c>,1)   

classmethod的输出:

a.class_foo(1)
# executing class_foo(,1)

以上代码可以看出,创建classmethod时,该对象实例的class cls 是作为第一个输入变量的,而不是该实例本身(如果是实例本身的话,第一个输入变量就是self, 就是一个普通的我们常用的情况了)

这样创建的classmethod 有什么好处呢? 好处就是你可以直接用class来call这个函数,而不需要费周折地先去创建一个实例(class instance)。

而staticmethods呢,它没有默认的第一个输入变量。 它跟我们在一个空白的script里写的一个普通的函数 def fund():... 没有任何实质的区别。唯一的不同就是你要通过 类class 或者实例instance 来call它。

With staticmethods, neither self (the object instance) nor cls (the class) is implicitly passed as the first argument. They behave like plain functions except that you can call them from an instance or the class.

本文参考来源:https://stackoverflow.com/que...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43913.html

相关文章

  • python classmethodstaticmethod 小谈

    摘要:而类的实例并不会影响类的静态变量,只是会修改对象实例本身的值,所以后面两个的结果总是同样,如果我们使用和结果也将仅仅是静态变量变化后的结果,与类的实例无关以上是对和的暂时做的了解的总结,如有纰漏,请及时指正 概念 python 的classmethod 与staticmethod 这两个有什么区别? 二者又有什么联系?在google和baidu之后, 得到的大致的联系就是二者都是对类的...

    keke 评论0 收藏0
  • 90 % Python 开发者不知道描述符应用

    摘要:由上面的注释,可以看出其实就相当于一个描述符类,而在此刻变成了一个描述符。调用这个方法可以知道,每调用一次,它都会经过描述符类的。基于描述符如何实现同样的也是一样。我想你应该对描述符在中的应用有了更深的理解。好吧,我承认我标题党了。但是这篇文章的知识点,你有极大的可能并不知道。 前段时间,我写了一篇描述符的入门级文章,从那些文章里你知道了如何定义描述符,且明白了描述符是如何工作的。 如果你还...

    番茄西红柿 评论0 收藏0
  • 90 % Python 开发者不知道描述符应用

    摘要:由上面的注释,可以看出其实就相当于一个描述符类,而在此刻变成了一个描述符。调用这个方法可以知道,每调用一次,它都会经过描述符类的。基于描述符如何实现同样的也是一样。我想你应该对描述符在中的应用有了更深的理解。好吧,我承认我标题党了。但是这篇文章的知识点,你有极大的可能并不知道。 前段时间,我写了一篇描述符的入门级文章,从那些文章里你知道了如何定义描述符,且明白了描述符是如何工作的。 如果你还...

    0x584a 评论0 收藏0
  • 【译】python 静态方法类方法区别

    摘要:尽管和非常相似,但在用法上依然有一些明显的区别。所以,从静态方法的使用中可以看出,我们不会访问到本身它基本上只是一个函数,在语法上就像一个方法一样,但是没有访问对象和它的内部字段和其他方法,相反会访问,会访问。 python staticmethod and classmethod Though classmethod and staticmethod are quite simil...

    Crazy_Coder 评论0 收藏0
  • classmethod&staticmethod 以及 __slots__

    摘要:什么是中的它的用途是什么装饰器对应的函数不需要实例化,不需要参数,但第一个参数需要是表示自身类的参数,可以来调用类的属性,类的方法,实例化对象等。 什么是python中的classmethod,它的用途是什么? classmethod装饰器对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。 cl...

    newsning 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<