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


Posted in Python onDecember 14, 2020

本文主要介绍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 @staticmethod和@classmethod内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
详解django中自定义标签和过滤器
Jul 03 Python
基于Python和Scikit-Learn的机器学习探索
Oct 16 Python
python实现单向链表详解
Feb 08 Python
python 对象和json互相转换方法
Mar 22 Python
python实现一组典型数据格式转换
Dec 15 Python
Python离线安装PIL 模块的方法
Jan 08 Python
python实现多张图片拼接成大图
Jan 15 Python
python redis连接 有序集合去重的代码
Aug 04 Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
Jan 04 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
Feb 21 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
Feb 28 Python
Python pandas之求和运算和非空值个数统计
Aug 07 Python
Python 找出英文单词列表(list)中最长单词链
Dec 14 #Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
Dec 14 #Python
Python实现Kerberos用户的增删改查操作
Dec 14 #Python
python-地图可视化组件folium的操作
Dec 14 #Python
python多线程和多进程关系详解
Dec 14 #Python
Python Pandas list列表数据列拆分成多行的方法实现
Dec 14 #Python
pandas将list数据拆分成行或列的实现
Dec 13 #Python
You might like
PHP UTF8编码内的繁简转换类
2009/07/20 PHP
PHP Array交叉表实现代码
2010/08/05 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
2013/06/20 PHP
关于zend studio 出现乱码问题的总结
2013/06/23 PHP
PHP反射使用实例和PHP反射API的中文说明
2014/07/02 PHP
smarty内置函数config_load用法实例
2015/01/22 PHP
php实现无限级分类查询(递归、非递归)
2016/03/10 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
2016/04/04 PHP
Laravel框架实现的批量删除功能示例
2019/01/16 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
十分钟打造AutoComplete自动完成效果代码
2009/12/26 Javascript
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
2010/04/25 Javascript
js验证模型自我实现的具体方法
2013/06/21 Javascript
jQuery读取和设定KindEditor值的方法
2013/11/22 Javascript
JavaScript中提前声明变量或函数例子
2014/11/12 Javascript
使用jquery给新生的th绑定hover事件的实例
2017/02/10 Javascript
jQuery实现上下滚动公告栏详细代码
2018/11/21 jQuery
通过实例学习React中事件节流防抖
2019/06/17 Javascript
js实现翻牌小游戏
2020/07/31 Javascript
深入解析Python中的list列表及其切片和迭代操作
2016/03/13 Python
python调用支付宝支付接口流程
2019/08/15 Python
Django将默认的SQLite更换为MySQL的实现
2019/11/18 Python
python enumerate内置函数用法总结
2020/01/07 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
CSS3 实现时间轴动画
2020/11/25 HTML / CSS
LightInTheBox法国站:中国跨境电商
2020/03/05 全球购物
党员教师一句话承诺
2014/05/30 职场文书
市场营销毕业求职信
2014/08/07 职场文书
党的群众路线教育实践活动个人对照检查材料(教师)
2014/11/04 职场文书
2015年度团总支工作总结
2015/04/23 职场文书
党员干部公开承诺书范文
2015/04/27 职场文书
八月一日观后感
2015/06/10 职场文书
爱国主义影片观后感
2015/06/18 职场文书
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android
mysql的Buffer Pool存储及原理
2022/04/02 MySQL