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生成指定尺寸缩略图的示例
May 07 Python
Python多进程编程技术实例分析
Sep 16 Python
Python中实现常量(Const)功能
Jan 28 Python
Python常用小技巧总结
Jun 01 Python
Python的MongoDB模块PyMongo操作方法集锦
Jan 05 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
Jan 04 Python
Python callable()函数用法实例分析
Mar 17 Python
python入门:这篇文章带你直接学会python
Sep 14 Python
在Python中实现替换字符串中的子串的示例
Oct 31 Python
Pytorch实现的手写数字mnist识别功能完整示例
Dec 13 Python
通过实例解析Python RPC实现原理及方法
Jul 07 Python
Python如何将将模块分割成多个文件
Aug 04 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代码将360浏览器导出的favdb的sqlite数据库文件转换为html
2015/12/09 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
jQuery select控制插件
2009/08/17 Javascript
用Javascript 获取页面元素的位置的代码
2009/09/25 Javascript
不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
2013/01/11 Javascript
js window.print实现打印特定控件或内容
2013/09/16 Javascript
js 赋值包含单引号双引号问题的解决方法
2014/02/26 Javascript
我用的一些Node.js开发工具、开发包、框架等总结
2014/09/25 Javascript
使用javascript实现简单的选项卡切换
2015/01/09 Javascript
原生Js实现简易烟花爆炸效果的方法
2015/03/20 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
jQuery侧边栏实现代码
2016/05/06 Javascript
AngularJs 指令详解及示例代码
2016/09/01 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
巧用weui.topTips验证数据的实例
2017/04/17 Javascript
Angular 4环境准备与Angular cli创建项目详解
2017/05/27 Javascript
微信小程序实现图片压缩功能
2018/01/26 Javascript
Vue组件之极简的地址选择器的实现
2018/05/31 Javascript
webpack公共组件引用路径简化小技巧
2018/06/15 Javascript
vue-cli初始化项目中使用less的方法
2018/08/09 Javascript
vue模仿网易云音乐的单页面应用
2019/04/24 Javascript
jQuery控制input只能输入数字和两位小数的方法
2019/05/16 jQuery
详解JavaScript自定义函数
2020/07/29 Javascript
Python类定义和类继承详解
2015/05/08 Python
Python交互式图形编程的实现
2019/07/25 Python
Python爬虫实现自动登录、签到功能的代码
2020/08/20 Python
Python基于locals返回作用域字典
2020/10/17 Python
Omio波兰:全欧洲低价大巴、火车和航班搜索和比价
2018/02/16 全球购物
青年志愿者事迹材料
2014/02/07 职场文书
篮球赛口号
2014/06/18 职场文书
安全生产标语大全
2014/10/06 职场文书
信用卡工作证明范本
2015/06/19 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书
创业计划书之农家乐
2019/10/09 职场文书
八年级作文之感悟亲情
2019/11/20 职场文书
python+opencv实现视频抽帧示例代码
2021/06/11 Python