对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文件读写并使用mysql批量插入示例分享(python操作mysql)
Feb 17 Python
python同时给两个收件人发送邮件的方法
Apr 30 Python
Python的collections模块中namedtuple结构使用示例
Jul 07 Python
Python常用内置模块之xml模块(详解)
May 23 Python
pandas把dataframe转成Series,改变列中值的类型方法
Apr 10 Python
python处理两种分隔符的数据集方法
Dec 12 Python
python全栈要学什么 python全栈学习路线
Jun 28 Python
Python编程中类与类的关系详解
Aug 08 Python
python 定时器每天就执行一次的实现代码
Aug 14 Python
Python3的unicode编码转换成中文的问题及解决方案
Dec 10 Python
详解python如何引用包package
Jun 07 Python
keras中epoch,batch,loss,val_loss用法说明
Jul 02 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&amp;&amp;mysql)一
2006/10/09 PHP
PHP配置心得包含MYSQL5乱码解决
2006/11/20 PHP
不用mod_rewrite直接用php实现伪静态化页面代码
2008/10/04 PHP
PHP面向对象法则
2012/02/23 PHP
深入PHP变量存储的详解
2013/06/13 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
2016/10/10 PHP
PHP+RabbitMQ实现消息队列的完整代码
2019/03/20 PHP
浅谈php常用的7大框架的优缺点
2020/07/20 PHP
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
Windows系统中安装nodejs图文教程
2015/02/28 NodeJs
HTML5之WebSocket入门3 -通信模型socket.io
2015/08/21 Javascript
jQuery添加和删除指定标签的方法
2015/12/16 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
通用无限极下拉菜单的实现代码
2016/05/31 Javascript
Jquery获取第一个子元素简单实例
2016/06/02 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
2016/09/05 Javascript
详解使用webpack打包编写一个vue-toast插件
2017/11/08 Javascript
jQuery实现导航样式布局操作示例【可自定义样式布局】
2018/07/24 jQuery
JS实现的获取银行卡号归属地及银行卡类型操作示例
2019/01/08 Javascript
使用layui前端框架弹出form表单以及提交的示例
2019/10/25 Javascript
[33:15]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VP VS Mineski
2018/03/31 DOTA
python数据结构之图深度优先和广度优先实例详解
2015/07/08 Python
Python读取MRI并显示为灰度图像实例代码
2018/01/03 Python
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
TensorFlow实现AutoEncoder自编码器
2018/03/09 Python
Python中py文件引用另一个py文件变量的方法
2018/04/29 Python
python批量识别图片指定区域文字内容
2019/04/30 Python
Python处理session的方法整理
2019/08/29 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
2019/11/15 Python
Python第三方库的几种安装方式(小结)
2020/04/03 Python
python从Oracle读取数据生成图表
2020/10/14 Python
如何基于Python pygame实现动画跑马灯
2020/11/18 Python
编写类String的构造函数、析构函数和赋值函数
2012/05/29 面试题
2014年置业顾问工作总结
2014/11/17 职场文书
大队委员竞选演讲稿
2015/11/20 职场文书
js不常见操作运算符总结
2021/11/20 Javascript