对Python中的@classmethod用法详解


Posted in Python onApril 21, 2018

在Python面向对象编程中的类构建中,有时候会遇到@classmethod的用法。

总感觉有这种特殊性说明的用法都是高级用法,在我这个层级的水平中一般是用不到的。

不过还是好奇去查了一下。

大致可以理解为:使用了@classmethod修饰的方法是类专属的,而且是可以通过类名进行调用的。为了能够展示其与一般方法的差异,写一段简单的代码如下:

class DemoClass:
    @classmethod
    def classPrint(self):
       print("class method")
    def objPrint(self):
       print("obj method")
 
obj = DemoClass()
obj.objPrint()
obj.classPrint()
 
DemoClass.classPrint()
DemoClass.objPrint()

程序的执行结果如下:

grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python classmethod.py
obj method
class method
class method
Traceback (mostrecent call last):
 File "classmethod.py", line 13, in<module>
  DemoClass.objPrint()
TypeError: unboundmethod objPrint() must be called with DemoClass instance as first argument (gotnothing instead)
grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$exit
exit
 
E:\01_workspace\02_programme_language\03_python\03_OOP\2017\08>pythonclassmethod.py
obj method
class method
class method
Traceback (mostrecent call last):
 File "classmethod.py", line 13, in<module>
  DemoClass.objPrint()
TypeError:objPrint() missing 1 required positional argument: 'self'

上面的程序执行,我是在两个操作系统中的两个Python版本环境中进行的。不管是Py2还是Py3,这方面的设计都是差不多的。总体来说,这种用法还是很微妙的。由于没有足够的实战历练,暂时还说不好这个东西有什么更好的优势。

这篇对Python中的@classmethod用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python利用matplotlib生成图片背景及图例透明的效果
Apr 27 Python
python OpenCV学习笔记之绘制直方图的方法
Feb 08 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
Apr 20 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
Sep 13 Python
详解如何在Apache中运行Python WSGI应用
Jan 02 Python
Python从列表推导到zip()函数的5种技巧总结
Oct 23 Python
tensorflow 变长序列存储实例
Jan 20 Python
简单了解Python write writelines区别
Feb 27 Python
Python修改列表值问题解决方案
Mar 06 Python
python tkinter GUI绘制,以及点击更新显示图片代码
Mar 14 Python
在keras 中获取张量 tensor 的维度大小实例
Jun 10 Python
使用Python获取字典键对应值的方法
Apr 26 Python
python3+dlib实现人脸识别和情绪分析
Apr 21 #Python
Python通过属性手段实现只允许调用一次的示例讲解
Apr 21 #Python
使用Python和xlwt向Excel文件中写入中文的实例
Apr 21 #Python
使用pandas读取csv文件的指定列方法
Apr 21 #Python
Python 3.7新功能之dataclass装饰器详解
Apr 21 #Python
pandas or sql计算前后两行数据间的增值方法
Apr 20 #Python
对pandas进行数据预处理的实例讲解
Apr 20 #Python
You might like
Terran兵种对照表
2020/03/14 星际争霸
利用文件属性结合Session实现在线人数统计
2006/10/09 PHP
修改了一个很不错的php验证码(支持中文)
2007/02/14 PHP
yii2缓存Caching基本用法示例
2016/07/18 PHP
thinkPHP5.0框架模块设计详解
2017/03/18 PHP
Javascript拓展String方法小结
2013/07/08 Javascript
JavaScript中instanceof与typeof运算符的用法及区别详细解析
2013/11/19 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
浅谈$('div a') 与$('div&gt;a')的区别
2016/07/18 Javascript
JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题
2016/08/03 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
js实现表单提交后不重新刷新当前页面
2016/11/30 Javascript
Vue中如何实现轮播图的示例代码
2017/07/27 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
2017/08/18 Javascript
Node.js实现连接mysql数据库功能示例
2017/09/15 Javascript
vue中配置mint-ui报css错误问题的解决方法
2017/10/11 Javascript
JavaScript常用内置对象用法分析
2019/07/09 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
[01:09:24]Ti4开幕式
2014/07/19 DOTA
[01:04:14]OG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python编程通过蒙特卡洛法计算定积分详解
2017/12/13 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
django实现支付宝支付实例讲解
2019/10/17 Python
Python Merge函数原理及用法解析
2020/09/16 Python
html5 application cache遇到的严重问题
2012/12/26 HTML / CSS
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
Jdbc数据访问技术面试题
2012/03/30 面试题
黄河的主人教学反思
2014/02/07 职场文书
节约用水的口号
2014/06/20 职场文书
离婚协议书怎么写(范本参考)
2014/09/30 职场文书
廉洁自律个人总结
2015/02/14 职场文书
结婚通知短信怎么写
2015/04/17 职场文书
Python利用folium实现地图可视化
2021/05/23 Python
flex弹性布局详解
2022/03/20 HTML / CSS