基于python中staticmethod和classmethod的区别(详解)
2019/7/13 22:43:50
本文主要是介绍基于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()
上述类有三个函数,使用如下:
a.foo(1) # executing foo(<__main__.A object at 0xb7dbef0c>,1) ----------------------------------------------------------------- a.class_foo(1) # executing class_foo(<class '__main__.A'>,1) A.class_foo(1) # executing class_foo(<class '__main__.A'>,1) ----------------------------------------------------------------- a.static_foo(1) # executing static_foo(1) A.static_foo('hi') # executing static_foo(hi)
区别
• 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) # <bound method A.foo of <main.A object at 0xb7d52f0c>> print(a.class_foo) # <bound method type.class_foo of <class 'main.A'>> print A.class_foo <bound method classobj.class_foo of > print(a.static_foo) # print(A.static_foo) # ```
作用
• 使用场景:classmethod在一些工厂类的情况下使用较多,也就是说OOP里继承的时候使用,staticmethod一般情况下可以替换为外部的函数,后者继承的时候不可更改,和C++/JAVA中的静态方法很相似
• 有利于组织代码,同时有利于命名空间的整洁
以上这篇基于python中staticmethod和classmethod的区别(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持找一找教程网。
这篇关于基于python中staticmethod和classmethod的区别(详解)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器