详解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 相关文章推荐
python实现汉诺塔方法汇总
Jul 25 Python
python executemany的使用及注意事项
Mar 13 Python
python爬取亚马逊书籍信息代码分享
Dec 09 Python
NumPy 如何生成多维数组的方法
Feb 05 Python
30秒轻松实现TensorFlow物体检测
Mar 14 Python
python编写暴力破解zip文档程序的实例讲解
Apr 24 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 27 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
Jun 17 Python
pandas DataFrame的修改方法(值、列、索引)
Aug 02 Python
详解如何减少python内存的消耗
Aug 09 Python
python os.path.isfile 的使用误区详解
Nov 29 Python
pytorch显存一直变大的解决方案
Apr 08 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
德生S2000收音机更换“钕铁硼”全频扬声器
2021/03/02 无线电
Laravel5.3+框架定义API路径取消CSRF保护方法详解
2020/04/06 PHP
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
2013/10/29 Javascript
jquery ajax中使用jsonp的限制解决方法
2013/11/22 Javascript
js+css实现的简单易用兼容好的分页
2013/12/30 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
JavaScript制作的可折叠弹出式菜单示例
2014/04/04 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
2015/07/27 Javascript
javascript基于prototype实现类似OOP继承的方法
2015/12/16 Javascript
javascript实现的网站访问量统计代码
2015/12/20 Javascript
判断JS对象是否拥有某属性的方法推荐
2016/05/12 Javascript
JQuery手速测试小游戏实现思路详解
2016/09/20 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
javascript中闭包概念与用法深入理解
2016/12/15 Javascript
原生JS实现在线问卷调查投票特效
2017/01/03 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
2017/02/12 Javascript
完美解决axios跨域请求出错的问题
2018/02/05 Javascript
AnglarJs中的上拉加载实现代码
2018/02/08 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
2018/09/16 Javascript
js实现无缝轮播图效果
2020/03/09 Javascript
vue 清空input标签 中file的值操作
2020/07/21 Javascript
Python三种遍历文件目录的方法实例代码
2018/01/19 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
2020/03/18 Python
Python持续监听文件变化代码实例
2020/07/22 Python
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
连锁经营管理专业大学生求职信
2013/10/30 职场文书
小学教师岗位职责
2013/11/25 职场文书
寄语十八大感言
2014/02/07 职场文书
消防志愿者活动方案
2014/08/23 职场文书
红领巾心向党演讲稿
2014/09/10 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript