对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多进程通信Queue、Pipe、Value、Array实例
Nov 21 Python
剖析Django中模版标签的解析与参数传递
Jul 21 Python
基于python时间处理方法(详解)
Aug 14 Python
vscode 远程调试python的方法
Dec 01 Python
pycharm重置设置,恢复默认设置的方法
Oct 22 Python
python爬取酷狗音乐排行榜
Feb 20 Python
Python实现FM算法解析
Jun 18 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
Aug 06 Python
python数据归一化及三种方法详解
Aug 06 Python
用python中的matplotlib绘制方程图像代码
Nov 21 Python
python中68个内置函数的总结与介绍
Feb 24 Python
Python实现列表中非负数保留,负数转化为指定的数值方式
Jun 04 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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
PHP循环获取GET和POST值的代码
2008/04/09 PHP
判断PHP数组是否为空的代码
2011/09/08 PHP
PHP遍历并打印指定目录下所有文件实例
2014/02/10 PHP
YII模块实现绑定二级域名的方法
2014/07/09 PHP
PHP调试函数和日志记录函数分享
2015/01/31 PHP
php中的异常和错误浅析
2017/05/03 PHP
XAMPP升级PHP版本实现步骤解析
2020/09/04 PHP
JQuery学习笔录 简单的JQuery
2012/04/09 Javascript
JavaScript字符串String和Array操作的有趣方法
2012/12/18 Javascript
JS控制日期显示的小例子
2013/11/23 Javascript
js判断某个方法是否存在实例代码
2015/01/10 Javascript
Highcharts使用简例及异步动态读取数据
2015/12/30 Javascript
Angularjs中使用Filters详解
2016/03/11 Javascript
ionic组件ion-tabs选项卡切换效果实例
2016/08/27 Javascript
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
2018/08/01 Javascript
微信小程序实现简单跑马灯效果
2020/05/26 Javascript
javascript中join方法实例讲解
2019/02/21 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
layui自定义ajax左侧三级菜单
2019/07/26 Javascript
python解析文件示例
2014/01/23 Python
Python import自定义模块方法
2015/02/12 Python
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
2018/03/31 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
2019/11/11 Python
Python解析json代码实例解析
2019/11/25 Python
HTML5 Canvas中使用用路径描画圆弧
2015/01/01 HTML / CSS
印度网上购物首选目的地:Flipkart
2016/08/01 全球购物
美国休闲服装品牌:J.Crew Factory
2017/03/04 全球购物
2014年招商工作总结
2014/11/22 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
医生行业员工的辞职信
2019/06/24 职场文书
深入解析Apache Hudi内核文件标记机制
2022/03/31 Servers