基于python中staticmethod和classmethod的区别

这篇文章主要介绍了关于基于python中staticmethod和classmethod的区别,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

例子

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()

登录后复制

立即学习“Python免费学习笔记(深入)”;

上述类有三个函数,使用如下:

a.foo(1)# executing foo(,1)-----------------------------------------------------------------a.class_foo(1)# executing class_foo(,1)A.class_foo(1)# executing class_foo(,1)-----------------------------------------------------------------a.static_foo(1)# executing static_foo(1)A.static_foo('hi')# executing static_foo(hi)

登录后复制

立即学习“Python免费学习笔记(深入)”;

区别

• foo()的调用者必须是类A的一个实例,class_foo()与static_foo()的调用者既可以是类也可以是某个实例

• 参数不同,foo() 参数为self和其他参数,class_foo()参数使用类(cls)替换了self,static_foo()则只有参数,没有self和类(cls)

• a.foo(1)中的foo()与a是绑定的,class_foo()是与类绑定的,而static_foo()与这两者都没有绑定,可以使用print来查看,如下:

"print(a.foo)# >print(a.class_foo)# >print A.class_fooprint(a.static_foo)# print(A.static_foo)# "

登录后复制

立即学习“Python免费学习笔记(深入)”;

作用

• 使用场景:classmethod在一些工厂类的情况下使用较多,也就是说OOP里继承的时候使用,staticmethod一般情况下可以替换为外部的函数,后者继承的时候不可更改,和C++/JAVA中的静态方法很相似

• 有利于组织代码,同时有利于命名空间的整洁

立即学习“Python免费学习笔记(深入)”;

以上就是基于python中staticmethod和classmethod的区别的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2262224.html

(0)
上一篇 2025年2月27日 06:47:22
下一篇 2025年2月24日 16:21:17

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论