基于python中staticmethod和classmethod的区别(详解)

 更新时间:2017年10月24日 09:54:42   作者:wswang  
下面小编就为大家带来一篇基于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的区别(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • wxPython定时器wx.Timer简单应用实例

    wxPython定时器wx.Timer简单应用实例

    这篇文章主要介绍了wxPython定时器wx.Timer简单应用,实例分析了Python使用wxPython创建窗口应用程序及定时器的相关使用技巧,需要的朋友可以参考下
    2015-06-06
  • Sentry错误日志监控使用方法解析

    Sentry错误日志监控使用方法解析

    这篇文章主要介绍了Sentry错误日志监控使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • python连接sql server乱码的解决方法

    python连接sql server乱码的解决方法

    为解决python连接sql server是出现的乱码,需要在连接sql server 时指定字符集utf8(client charset = UTF-8),python环境制定了字符集变量(#coding=utf-8 )
    2013-01-01
  • 使用Python横向合并excel文件的实例

    使用Python横向合并excel文件的实例

    今天小编就为大家分享一篇使用Python横向合并excel文件的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python使用socket的UDP协议实现FTP文件服务功能

    Python使用socket的UDP协议实现FTP文件服务功能

    这篇文章主要介绍了Python使用socket的UDP协议实现FTP文件服务,本示例主要是用Python的socket,使用UDP协议实现一个FTP服务端、FTP客户端,用来实现文件的传输,需要的朋友可以参考下
    2023-10-10
  • Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例

    Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例

    这篇文章主要介绍了Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02
  • python print 按逗号或空格分隔的方法

    python print 按逗号或空格分隔的方法

    下面小编就为大家分享一篇python print 按逗号或空格分隔的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • python3+selenium实现qq邮箱登陆并发送邮件功能

    python3+selenium实现qq邮箱登陆并发送邮件功能

    这篇文章主要为大家详细介绍了python3+selenium实现qq邮箱登陆,并发送邮件功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • python格式化输出format()函数常见用法和格式选项

    python格式化输出format()函数常见用法和格式选项

    这篇文章主要介绍了python格式化输出format()函数常见用法和格式选项的相关资料,format方法是一种强大的字符串格式化工具,它允许你将变量或表达式插入到字符串中,并根据需要进行格式化,需要的朋友可以参考下
    2025-03-03
  • Python全景系列之模块与包全面解读

    Python全景系列之模块与包全面解读

    这篇文章将带大家深入探讨Python模块与包的基本概念,使用方法以及其在实际项目中的应用,同时也会揭示一些鲜为人知,却又实用的技术细节
    2023-05-05

最新评论