详解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 字符串操作实现代码(截取/替换/查找/分割)
Jun 08 Python
用python实现简单EXCEL数据统计的实例
Jan 24 Python
用Eclipse写python程序
Feb 10 Python
python使用筛选法计算小于给定数字的所有素数
Mar 19 Python
python中pygame安装过程(超级详细)
Aug 04 Python
python3 下载网络图片代码实例
Aug 27 Python
python sorted函数的小练习及解答
Sep 18 Python
python实现飞机大战项目
Mar 11 Python
在脚本中单独使用django的ORM模型详解
Apr 01 Python
基于python生成英文版词云图代码实例
May 16 Python
python 基于selectors库实现文件上传与下载
Dec 31 Python
Python爬虫实战之爬取京东商品数据并实实现数据可视化
Jun 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 获取mysql数据库信息代码
2009/03/12 PHP
php读取远程gzip压缩网页的方法
2014/12/29 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
2015/05/09 PHP
终于解决了IE8不支持数组的indexOf方法
2013/04/03 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
jQuery设置div一直在页面顶部显示的方法
2013/10/24 Javascript
javascript去掉代码里面的注释
2015/07/24 Javascript
学习jQuey中的return false
2015/12/18 Javascript
Javascript中的数组常用方法解析
2016/06/17 Javascript
JS轮播图中缓动函数的封装
2020/11/25 Javascript
BootStrap与Select2使用小结
2017/02/17 Javascript
Angularjs自定义指令实现分页插件(DEMO)
2017/09/16 Javascript
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
详解layui中的树形关于取值传值问题
2018/01/16 Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
2018/08/17 Javascript
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
JavaScript进阶(三)闭包原理与用法详解
2020/05/09 Javascript
微信小程序实现watch监听
2020/06/04 Javascript
原生js canvas实现鼠标跟随效果
2020/08/02 Javascript
[46:00]Ti4 冒泡赛第二轮LGD vs C9 2
2014/07/14 DOTA
Python中一些自然语言工具的使用的入门教程
2015/04/13 Python
python读取csv文件并把文件放入一个list中的实例讲解
2018/04/27 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
python2.7 安装pip的方法步骤(管用)
2019/05/05 Python
django数据关系一对多、多对多模型、自关联的建立
2019/07/24 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
2020/05/13 Python
福克斯租车:Fox Rent A Car
2017/04/13 全球购物
美国独家设计师眼镜在线光学商店:Glasses Gallery
2017/12/28 全球购物
2014年党支部承诺书
2014/05/30 职场文书
社团活动总结书
2014/06/27 职场文书
银行员工考核评语
2014/12/31 职场文书
违纪检讨书范文
2015/01/27 职场文书
鲁迅故里导游词
2015/02/05 职场文书
自主招生英文自荐信
2015/03/25 职场文书
回复函范文
2015/07/14 职场文书
table不让td文字溢出操作方法
2022/12/24 HTML / CSS