本文摘自php中文网,作者不言,侵删。
这篇文章主要介绍了关于基于python中staticmethod和classmethod的区别,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下例子
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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()
|
上述类有三个函数,使用如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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来查看,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | "
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如何判断输入都是字母
Python怎么打开网页
Python开发安卓app可行吗
小甲鱼零基础入门学习Python视频教程
Python怎么打开
全面了解Python爬虫之xlml解析库
Python 装饰器
Python读写docx文件的方法
Python播放wav文件(调用系统底层api)的方法
Python学习法则
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » 基于python中staticmethod和classmethod的区别