python @classmethod 的使用场合详解


Posted in Python onAugust 23, 2019

官方的说法:

classmethod(function)

中文说明:

classmethod是用来指定一个类的方法为类方法,没有此参数指定的类的方法为实例方法,使用方法如下:

class C:
  @classmethod
  def f(cls, arg1, arg2, ...): ...

看后之后真是一头雾水。说的啥子东西呢???

自己到国外的论坛看其他的例子和解释,顿时就很明朗。 下面自己用例子来说明。

看下面的定义的一个时间类:

class Data_test(object):
  day=0
  month=0
  year=0
  def __init__(self,year=0,month=0,day=0):
    self.day=day
    self.month=month
    self.year=year

  def out_date(self):
    print "year :"
    print self.year
    print "month :"
    print self.month
    print "day :"
    print self.day
t=Data_test(2016,8,1)
t.out_date()

输出:

year :
2016
month :
8
day :
1

符合期望。

如果用户输入的是 "2016-8-1" 这样的字符格式,那么就需要调用Date_test 类前做一下处理:

string_date='2016-8-1'
year,month,day=map(int,string_date.split('-'))
s=Data_test(year,month,day)

先把‘2016-8-1' 分解成 year,month,day 三个变量,然后转成int,再调用Date_test(year,month,day)函数。 也很符合期望。

那我可不可以把这个字符串处理的函数放到 Date_test 类当中呢?

那么@classmethod 就开始出场了

class Data_test2(object):
  day=0
  month=0
  year=0
  def __init__(self,year=0,month=0,day=0):
    self.day=day
    self.month=month
    self.year=year
  @classmethod
  def get_date(cls,data_as_string):
    #这里第一个参数是cls, 表示调用当前的类名
    year,month,day=map(int,string_date.split('-'))
    date1=cls(year,month,day)
    #返回的是一个初始化后的类
    return date1
  def out_date(self):
    print "year :"
    print self.year
    print "month :"
    print self.month
    print "day :"
    print self.day

在Date_test类里面创建一个成员函数, 前面用了@classmethod装饰。 它的作用就是有点像静态类,比静态类不一样的就是它可以传进来一个当前类作为第一个参数。

那么如何调用呢?

r=Data_test2.get_date("2016-8-6")
r.out_date()

输出:

year :
2016
month :
8
day :
1

这样子等于先调用get_date()对字符串进行出来,然后才使用Data_test的构造函数初始化。

这样的好处就是你以后重构类的时候不必要修改构造函数,只需要额外添加你要处理的函数,然后使用装饰符 @classmethod 就可以了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
用Python计算三角函数之acos()方法的使用
May 15 Python
Python 多线程抓取图片效率对比
Feb 27 Python
python下读取公私钥做加解密实例详解
Mar 29 Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
Apr 29 Python
详解Python字符串切片
May 20 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
Jul 24 Python
Python 3 判断2个字典相同
Aug 06 Python
Python Socket TCP双端聊天功能实现过程详解
Jun 15 Python
python数据类型强制转换实例详解
Jun 22 Python
利用Python实现斐波那契数列的方法实例
Jul 26 Python
如何在 Matplotlib 中更改绘图背景的实现
Nov 26 Python
利用Python实现Picgo图床工具
Nov 23 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
Aug 23 #Python
python 类的继承 实例方法.静态方法.类方法的代码解析
Aug 23 #Python
Python中最好用的命令行参数解析工具(argparse)
Aug 23 #Python
详解Python并发编程之创建多线程的几种方法
Aug 23 #Python
详解Python并发编程之从性能角度来初探并发编程
Aug 23 #Python
python Kmeans算法原理深入解析
Aug 23 #Python
Python高级特性 切片 迭代解析
Aug 23 #Python
You might like
Php做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
克隆一个新项目的快捷方式
2013/04/10 PHP
深入理解PHP 数组之count 函数
2016/06/13 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
2011/09/28 Javascript
javascript将浮点数转换成整数的三个方法
2014/06/23 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
2015/06/10 Javascript
Node.js开启Https的实践详解
2016/10/25 Javascript
VUE实现一个分页组件的示例
2017/09/13 Javascript
js原生日历的实例(推荐)
2017/10/31 Javascript
Bootstrap 3多级下拉菜单实例
2017/11/23 Javascript
javascript trie前缀树的示例
2018/01/29 Javascript
vue 组件 全局注册和局部注册的实现
2018/02/28 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
2018/07/31 jQuery
JS实现匀速与减速缓慢运动的动画效果封装示例
2018/08/27 Javascript
koa源码中promise的解读
2018/11/13 Javascript
如何提升vue.js中大型数据的性能
2019/06/21 Javascript
微信小程序 高德地图路线规划实现过程详解
2019/08/05 Javascript
Python引用模块和查找模块路径
2016/03/17 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
详解pyppeteer(python版puppeteer)基本使用
2019/06/12 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
2020/01/10 Python
python之生成多层json结构的实现
2020/02/27 Python
使用Python获取当前工作目录和执行命令的位置
2020/03/09 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
2020/12/01 Python
关于HTML5的22个初级技巧(图文教程)
2012/06/21 HTML / CSS
Adobe Html5 Extension开发初体验图文教程
2017/11/14 HTML / CSS
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
Nike瑞典官方网站:Nike.com (SE)
2018/11/26 全球购物
印尼在线旅游门户网站:NusaTrip
2019/11/01 全球购物
信息管理与信息系统专业求职信
2014/06/21 职场文书
医务人员医德考评自我评价
2015/03/03 职场文书
工作自我评价范文
2019/03/21 职场文书
Go中的条件语句Switch示例详解
2021/08/23 Golang
使用Spring处理x-www-form-urlencoded方式
2021/11/02 Java/Android