基于python中staticmethod和classmethod的区别


本文摘自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》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...