详解Python中@staticmethod和@classmethod区别及使用示例代码

 更新时间:2020年12月14日 10:09:41   作者:levi  
这篇文章主要介绍了详解Python中@staticmethod和@classmethod区别及使用示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

本文主要介绍Python中,class(类)的装饰器@staticmethod和@classmethod的使用示例代码和它们的区别。

1、@staticmethod和@classmethod区别

@staticmethod:静态方法

@classmethod:类方法

一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。

而使用@staticmethod或@classmethod,就可以不需要实例化,直接通过类名就可以实现调用

使用:直接类名.方法名()来调用。@staticmethod和@classmethod都可以直接类名.方法名()来调用,

@staticmethod不需要表示自身对象的self和自身类的cls参数(这两个参数都不需要添加),就跟使用函数一样。

使用:直接类名.属性名或直接类名.方法名。

@classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。

使用:直接类名.属性名或直接类名.方法名。

两者定义的装饰器调用方法一样,但是@classmethod装饰器定义的类方法需要传入类参数cls。

@staticmethod中要调用到这个类的一些属性方法,只能直接类名.属性名或类名.方法名。

而@classmethod有cls参数,可以来调用类的属性,类的方法,实例化对象等,避免硬编码更灵活。

2、@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作为第一个参数隐式传递。
a.foo (1)
# executing foo(<__main__.A object at 0xb7dbef0c>,1)
#对于类方法,对象实例的类将隐式地作为第一个参数而不是传递self
a.class_foo(1)
# executing class_foo(<class '__main__.A'>,1)
#使用这个类调用class_foo
A.class_foo(1)
# executing class_foo(<class '__main__.A'>,1)
#对于staticmethods,self(对象实例)和cls(类)都不会作为第一个参数隐式传递。它们的行为类似普通函数,除了你可以从实例或类中调用它们
a.static_foo(1)
# executing static_foo(1)
A.static_foo('hi')
# executing static_foo(hi)
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.static_foo)
# <function static_foo at 0xb7d479cc>
print(a.static_foo)
# <function static_foo at 0xb7d479cc>
 

总结一下彼此的调用区别:

到此这篇关于详解Python中@staticmethod和@classmethod区别及使用示例代码的文章就介绍到这了,更多相关Python @staticmethod和@classmethod内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python中pyplot基础图标函数整理

    python中pyplot基础图标函数整理

    在本篇文章里小编给大家整理的是一篇关于python中pyplot基础图标函数整理的相关知识点,有兴趣的朋友们可以参考下。
    2020-11-11
  • Python编程之列表操作实例详解【创建、使用、更新、删除】

    Python编程之列表操作实例详解【创建、使用、更新、删除】

    这篇文章主要介绍了Python编程之列表操作,结合实例形式分析了Python列表的创建、使用、更新、删除等实现方法与相关操作技巧,需要的朋友可以参考下
    2017-07-07
  • python框架flask表单实现详解

    python框架flask表单实现详解

    这篇文章主要介绍了python框架flask表单实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • pytorch visdom安装开启及使用方法

    pytorch visdom安装开启及使用方法

    这篇文章主要介绍了pytorch visdom安装开启及使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • python Web开发你要理解的WSGI & uwsgi详解

    python Web开发你要理解的WSGI & uwsgi详解

    这篇文章主要给大家介绍了关于python Web开发你一定要理解的WSGI & uwsgi的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-08-08
  • 学习python (1)

    学习python (1)

    学习python (1)...
    2006-10-10
  • Python代码中偏函数的使用详解

    Python代码中偏函数的使用详解

    Python中的偏函数是来自函数式编程的一个强大工具,它的主要目标是减少函数调用的复杂性,本文将详细介绍偏函数的具体使用,需要的小伙伴可以了解下
    2023-12-12
  • python 自定义包的实现示例

    python 自定义包的实现示例

    如果Python的模块过多,可能造成一定的混乱,这时可以通过Python包来管理模块,本文主要介绍了python 自定义包的实现示例,感兴趣的可以了解一下
    2024-05-05
  • Python必备技巧之字典(Dictionary)详解

    Python必备技巧之字典(Dictionary)详解

    Python中的字典由于是对象的集合属于复合数据类型,类似于列表。本文将通过示例详细讲解Python中字典的使用方法,感兴趣的可以了解一下
    2022-03-03
  • TensorFlow人工智能学习按索引取数据及维度变换详解

    TensorFlow人工智能学习按索引取数据及维度变换详解

    这篇文章主要为大家介绍了TensorFlow人工智能学习按索引取数据及维度变换的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11

最新评论