对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实现数组插入新元素的方法
May 22 Python
图文讲解选择排序算法的原理及在Python中的实现
May 04 Python
Python算法应用实战之栈详解
Feb 04 Python
python互斥锁、加锁、同步机制、异步通信知识总结
Feb 11 Python
Django中url的反向查询的方法
Mar 14 Python
pytorch 把MNIST数据集转换成图片和txt的方法
May 20 Python
Django 实现admin后台显示图片缩略图的例子
Jul 28 Python
python中的split()函数和os.path.split()函数使用详解
Dec 21 Python
Django重设Admin密码过程解析
Feb 10 Python
Python基于class()实现面向对象原理详解
Mar 26 Python
Django 实现将图片转为Base64,然后使用json传输
Mar 27 Python
在spyder IPython console中,运行代码加入参数的实例
Apr 20 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
php的字符串用法小结
2010/06/08 PHP
WordPress开发中用于标题显示的相关函数使用解析
2016/01/07 PHP
Yii框架实现邮箱激活的方法【数字签名】
2016/10/18 PHP
php给数组赋值的实例方法
2019/09/26 PHP
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
2012/08/14 Javascript
js获取url参数值的两种方式
2013/09/10 Javascript
jquery操作cookie插件分享
2014/01/14 Javascript
js获得网页背景色和字体色的方法
2014/03/21 Javascript
js图片预加载示例
2014/04/30 Javascript
js简单的弹出框有关闭按钮
2014/05/05 Javascript
JQuery遍历json数组的3种方法
2014/11/08 Javascript
编写简单的jQuery提示插件
2014/12/21 Javascript
seajs实现强制刷新本地缓存的方法分析
2017/10/16 Javascript
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
微信jssdk逻辑在vue中的运用详解
2018/11/14 Javascript
微信小程序实现页面浮动导航
2019/01/28 Javascript
vue2.0结合Element-ui实战案例
2019/03/06 Javascript
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
2020/05/23 Javascript
Python中map和列表推导效率比较实例分析
2015/06/17 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
python email smtplib模块发送邮件代码实例
2018/04/26 Python
详解Python中的正则表达式
2018/07/08 Python
python 动态生成变量名以及动态获取变量的变量名方法
2019/01/20 Python
python+Django+pycharm+mysql 搭建首个web项目详解
2019/11/29 Python
CSS Grid布局教程之网格单元格布局
2014/12/30 HTML / CSS
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
video.js支持m3u8格式直播的实现示例
2020/05/20 HTML / CSS
英国美发和美容产品商城:HQhair
2019/02/08 全球购物
Laravel中Kafka的使用详解
2021/03/24 PHP
少先队入队活动方案
2014/02/08 职场文书
有趣的广告词
2014/03/18 职场文书
采购员工作总结范文
2015/08/12 职场文书
2016年公共机构节能宣传周活动总结
2016/04/05 职场文书
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript
uni-app 微信小程序授权登录的实现步骤
2022/02/18 Javascript