详解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基础教程之面向对象的一些概念
Aug 29 Python
Python类属性与实例属性用法分析
May 09 Python
在CMD命令行中运行python脚本的方法
May 12 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
Jul 02 Python
Django集成搜索引擎Elasticserach的方法示例
Jun 04 Python
python实现websocket的客户端压力测试
Jun 25 Python
python 列表推导式使用详解
Aug 29 Python
使用python求解二次规划的问题
Feb 29 Python
如何基于python3和Vue实现AES数据加密
Mar 27 Python
python with语句的原理与用法详解
Mar 30 Python
django迁移文件migrations的实现
Mar 31 Python
Pyinstaller打包Scrapy项目的实现步骤
Sep 22 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
Nginx下配置codeigniter框架方法
2015/04/07 PHP
CI框架支持$_GET的两种实现方法
2016/05/18 PHP
PHP常用的三种设计模式
2017/02/17 PHP
thinkphp3.2.0 setInc方法 源码全面解析
2018/01/29 PHP
两种WEB下的模态对话框 (asp.net或js的分别实现)
2009/12/02 Javascript
javascript数字时钟示例分享
2014/04/23 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
vue.js+boostrap项目实践(案例详解)
2016/09/21 Javascript
JS制作类似选项卡切换的年历
2016/12/03 Javascript
Easyui在treegrid添加控件的实现方法
2017/06/23 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
2017/12/06 Javascript
vue的安装及element组件的安装方法
2018/03/09 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
JavaScript私有变量实例详解
2019/01/24 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
2019/05/01 Javascript
Vue表单之v-model绑定下拉列表功能
2019/05/14 Javascript
python实现在无须过多援引的情况下创建字典的方法
2014/09/25 Python
Python中的CSV文件使用&quot;with&quot;语句的方式详解
2018/10/16 Python
浅析Python 读取图像文件的性能对比
2019/03/07 Python
创建Django项目图文实例详解
2019/06/06 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
2019/07/16 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
python随机数分布random均匀分布实例
2019/11/27 Python
使用pyplot.matshow()函数添加绘图标题
2020/06/16 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
python中if嵌套命令实例讲解
2021/02/25 Python
CSS3的column-fill属性对齐列内容高度的用法详解
2016/07/01 HTML / CSS
canvas学习总结三之绘制路径-线段
2019/01/31 HTML / CSS
Currentbody法国:健康与美容高科技产品
2020/08/16 全球购物
将相和教学反思
2014/02/04 职场文书
大学生创业计划书
2014/08/14 职场文书
学生上课迟到检讨书
2015/01/01 职场文书
离婚撤诉申请书范本
2015/05/18 职场文书
2015年大学迎新工作总结
2015/07/16 职场文书
详解在SQLPlus中实现上下键翻查历史命令的功能
2022/03/18 SQL Server
Pandas实现DataFrame的简单运算、统计与排序
2022/03/31 Python