对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 示例分享---逻辑推理编程解决八皇后
Jul 20 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
Dec 12 Python
Python selenium实现微博自动登录的示例代码
May 16 Python
实例讲解Python3中abs()函数
Feb 19 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
Jun 19 Python
使用python来调用CAN通讯的DLL实现方法
Jul 03 Python
python对绑定事件的鼠标、按键的判断实例
Jul 17 Python
Django 在iframe里跳转顶层url的例子
Aug 21 Python
Django REST framwork的权限验证实例
Apr 02 Python
部署Django到阿里云服务器教程示例
Jun 03 Python
Pytorch1.5.1版本安装的方法步骤
Dec 31 Python
Python利用zhdate模块实现农历日期处理
Mar 31 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中英混合字符串截取函数代码
2011/07/17 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
yii的入口文件index.php中为什么会有这两句
2016/08/04 PHP
PHP+Oracle本地开发环境搭建方法详解
2019/04/01 PHP
简单的无缝滚动程序-仅几行代码
2007/05/08 Javascript
parseInt parseFloat js字符串转换数字
2010/08/01 Javascript
Web前端设计模式  制作漂亮的弹出层
2010/10/29 Javascript
JQuery动画animate的stop方法使用详解
2014/05/09 Javascript
使用js画图之正弦曲线
2015/01/12 Javascript
javascript生成不重复的随机数
2015/07/17 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
基于JavaScript实现拖动滑块效果
2017/02/16 Javascript
js图片上传的封装代码
2017/08/01 Javascript
微信小程序之滚动视图容器的实现方法
2017/09/26 Javascript
详解Vue.js自定义tipOnce指令用法实例
2018/12/19 Javascript
vue 项目build错误异常的解决方法
2019/04/22 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
vue实现百度搜索功能
2020/12/28 Javascript
解决vuecli3中img src 的引入问题
2020/08/04 Javascript
[01:00:17]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第二场 1月25日
2021/03/11 DOTA
浅谈Python由__dict__和dir()引发的一些思考
2017/10/30 Python
教你用Python写安卓游戏外挂
2018/01/11 Python
python处理大日志文件
2019/07/23 Python
django ajax发送post请求的两种方法
2020/01/05 Python
使用python客户端访问impala的操作方式
2020/03/28 Python
基于python实现MQTT发布订阅过程原理解析
2020/07/27 Python
探讨HTML5移动开发的几大特性(必看)
2015/12/30 HTML / CSS
Carolina Lemke Berlin澳大利亚官网:时尚太阳镜品牌
2019/09/17 全球购物
《一件运动衫》教学反思
2014/02/19 职场文书
国庆节新闻稿
2015/07/17 职场文书
学子宴致辞大全
2015/07/27 职场文书
宝宝满月宴答谢词
2015/09/30 职场文书
师德培训心得体会2016
2016/01/09 职场文书
MySQL中InnoDB存储引擎的锁的基本使用教程
2021/05/26 MySQL
nginx安装以及配置的详细过程记录
2021/09/15 Servers
MySQL修改默认引擎和字符集详情
2021/09/25 MySQL