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 client使用http post 到server端的代码
Feb 10 Python
Python(Tornado)模拟登录小米抢手机
Nov 12 Python
python教程之用py2exe将PY文件转成EXE文件
Jun 12 Python
Python基于pygame实现的弹力球效果(附源码)
Nov 11 Python
Python编写简单的HTML页面合并脚本
Jul 11 Python
将pip源更换到国内镜像的详细步骤
Apr 07 Python
Django框架自定义session处理操作示例
May 27 Python
Python获取时间范围内日期列表和周列表的函数
Aug 05 Python
python numpy 常用随机数的产生方法的实现
Aug 21 Python
在Matplotlib图中插入LaTex公式实例
Apr 17 Python
Python如何将模块打包并发布
Aug 30 Python
Opencv+Python识别PCB板图片的步骤
Jan 07 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.ini修改php上传文件大小限制的方法详解
2013/06/17 PHP
Linux平台PHP5.4设置FPM线程数量的方法
2016/11/09 PHP
Yii框架自定义数据库操作组件示例
2019/11/11 PHP
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
2007/03/06 Javascript
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
基于jquery实现的移入页面上空文本框时,让它变为焦点,移出清除焦点
2011/07/26 Javascript
使用CSS样式position:fixed水平滚动的方法
2014/02/19 Javascript
JS实现窗口加载时模拟鼠标移动的方法
2015/06/03 Javascript
整理Javascript数组学习笔记
2015/11/29 Javascript
每日十条JavaScript经验技巧(一)
2016/06/23 Javascript
轻松掌握JavaScript单例模式
2016/08/25 Javascript
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
2016/11/17 Javascript
为JQuery EasyUI 表单组件增加焦点切换功能的方法
2017/04/13 jQuery
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
基于ajax实现上传图片代码示例解析
2020/12/03 Javascript
Vue 简单实现前端权限控制的示例
2020/12/25 Vue.js
python目录操作之python遍历文件夹后将结果存储为xml
2014/01/27 Python
python中stdout输出不缓存的设置方法
2014/05/29 Python
python里对list中的整数求平均并排序
2014/09/12 Python
Python常见数据结构之栈与队列用法示例
2019/01/14 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
django 将自带的数据库sqlite3改成mysql实例
2020/07/09 Python
全球性的奢侈品梦工厂:Forzieri(福喜利)
2019/02/20 全球购物
教师节演讲稿
2014/05/06 职场文书
建议书的格式
2014/05/12 职场文书
房地产开发项目建议书
2014/05/16 职场文书
商场客服专员岗位职责
2014/06/13 职场文书
同志主要表现材料
2014/08/21 职场文书
科级干部群众路线教育实践活动对照检查材料思想汇报
2014/09/20 职场文书
2014公司年终工作总结
2014/12/19 职场文书
小学生差生评语
2014/12/29 职场文书
2016年寒假政治学习心得体会
2015/10/09 职场文书
2016年小学感恩节活动总结
2016/04/01 职场文书
Vue如何实现组件间通信
2021/05/15 Vue.js
Vue h函数的使用详解
2022/02/18 Vue.js
解决IIS7下无法绑定https主机的问题
2022/04/29 Servers