对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 字符串split的用法分享
Mar 23 Python
在Python的列表中利用remove()方法删除元素的教程
May 21 Python
Python基于高斯消元法计算线性方程组示例
Jan 17 Python
influx+grafana自定义python采集数据和一些坑的总结
Sep 17 Python
python读出当前时间精度到秒的代码
Jul 05 Python
Python Web框架之Django框架文件上传功能详解
Aug 16 Python
python中对_init_的理解及实例解析
Oct 11 Python
python flask中动态URL规则详解
Nov 22 Python
Python利用逻辑回归分类实现模板
Feb 15 Python
Python基础教程(一)——Windows搭建开发Python开发环境
Jul 20 Python
Python 在函数上添加包装器
Jul 28 Python
Python生成九宫格图片的示例代码
Apr 14 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
收音机发烧友应当熟知的100条知识
2021/03/02 无线电
PHP 最大运行时间 max_execution_time修改方法
2010/03/08 PHP
php获取客户端电脑屏幕参数的方法
2015/01/09 PHP
PHP无限极分类函数的实现方法详解
2017/04/15 PHP
js jquery做的图片连续滚动代码
2008/01/06 Javascript
javascript中的对象创建 实例附注释
2011/02/08 Javascript
jQuery EasyUI API 中文文档 - ValidateBox验证框
2011/10/06 Javascript
JS的千分位算法实现思路
2013/07/31 Javascript
JS控制一个DIV层在指定时间内消失的方法
2014/02/17 Javascript
基于JavaScript短信验证码如何实现
2016/01/24 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
vue-router 学习快速入门
2017/03/01 Javascript
Angular.JS利用ng-disabled属性和ng-model实现禁用button效果
2017/04/05 Javascript
webpack+vue2构建vue项目骨架的方法
2018/01/09 Javascript
Vue中render函数的使用方法
2018/01/31 Javascript
详解Angular中实现自定义组件的双向绑定的两种方法
2018/11/23 Javascript
每周一练 之 数据结构与算法(Stack)
2019/04/16 Javascript
layer iframe 设置关闭按钮的方法
2019/09/12 Javascript
详解Typescript里的This的使用方法
2021/01/08 Javascript
Python格式化css文件的方法
2015/03/10 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
使用Python的Scrapy框架十分钟爬取美女图
2016/12/26 Python
python中关于for循环的碎碎念
2017/06/30 Python
Python 错误和异常代码详解
2018/01/29 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
如何通过Python实现标签云算法
2019/07/02 Python
美国折扣香水网站:The Perfume Spot
2020/12/12 全球购物
一些网络技术方面的面试题
2014/05/01 面试题
财务会计人员求职的自我评价
2014/01/13 职场文书
活动总结报告怎么写
2014/07/03 职场文书
开展创先争优活动总结
2014/08/28 职场文书
2015年民主生活会发言材料
2014/12/15 职场文书
三八妇女节主持词
2015/07/04 职场文书
Nginx缓存设置案例详解
2021/09/15 Servers
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL
Python保存并浏览用户的历史记录
2022/04/29 Python