详解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下使用Txt2Html实现网页过滤代理的教程
Apr 11 Python
Python标准库sched模块使用指南
Jul 06 Python
深入理解Django的中间件middleware
Mar 14 Python
Python多进程原理与用法分析
Aug 21 Python
Python使用Opencv实现图像特征检测与匹配的方法
Oct 30 Python
Python numpy线性代数用法实例解析
Nov 15 Python
如何基于Python获取图片的物理尺寸
Nov 25 Python
Pycharm 2020年最新激活码(亲测有效)
Sep 18 Python
在PyTorch中使用标签平滑正则化的问题
Apr 03 Python
Python库skimage绘制二值图像代码实例
Apr 10 Python
打印tensorflow恢复模型中所有变量与操作节点方式
May 26 Python
python如何代码集体右移
Jul 20 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中SSO Cookie登录分析和实现
2015/11/06 PHP
理解Javascript_10_对象模型
2010/10/16 Javascript
javascript实现阻止iOS APP中的链接打开Safari浏览器
2014/06/12 Javascript
javascript将异步校验表单改写为同步表单
2015/01/27 Javascript
JavaScript常用脚本汇总(一)
2015/03/04 Javascript
7个有用的jQuery代码片段分享
2015/05/19 Javascript
jquery.validate使用时遇到的问题
2015/05/25 Javascript
jquery获得当前html页面源码的方法
2015/07/14 Javascript
js中利用tagname和id获取元素的方法
2016/01/03 Javascript
JavaScript中对JSON对象的基本操作示例
2016/05/21 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
js时间戳格式化成日期格式的多种方法介绍
2017/02/16 Javascript
jQuery实现 上升、下降、删除、添加一行代码
2017/03/06 Javascript
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
jQuery实现checkbox的简单操作
2017/11/18 jQuery
基于vue.js实现的分页
2018/03/13 Javascript
在create-react-app中使用sass的方法示例
2018/10/01 Javascript
element vue Array数组和Map对象的添加与删除操作
2018/11/14 Javascript
Python基本数据类型详细介绍
2014/03/11 Python
python检查指定文件是否存在的方法
2015/07/06 Python
Python中atexit模块的基本使用示例
2015/07/08 Python
python中matplotlib实现最小二乘法拟合的过程详解
2017/07/11 Python
opencv python 图像去噪的实现方法
2018/08/31 Python
如何通过python画loss曲线的方法
2019/06/26 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
2019/11/26 Python
Django多数据库配置及逆向生成model教程
2020/03/28 Python
django中ImageField的使用详解
2020/12/21 Python
土耳其时尚购物网站:Morhipo
2017/09/04 全球购物
Topshop法国官网:英国快速时尚品牌
2018/04/08 全球购物
品质主管的岗位职责
2013/12/04 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
2015年见习期个人工作总结
2015/05/28 职场文书
银行工作心得体会范文
2016/01/23 职场文书
施工安全协议书
2016/03/22 职场文书
2016年第十四个公民道德宣传日活动总
2016/04/01 职场文书
Python使用openpyxl模块处理Excel文件
2022/06/05 Python