coding:utf-8

装饰器是以@开头,@结构称为语法糖,装饰器的作用主要是给现有的函数增加一些额外的功能。
@classmethod
@staticmethod
@property

class People(object):"""docstring for People"""def __init__(self, name, age):super(People, self).__init__()self.name = nameself.age = age# 只能由对象才能调用的函数,称为实例方法def eat(self):print '吃饭了'# 将一个实例方法,转化成了一个类方法@classmethoddef work(cls):print '工作了 = ',cls# 实例方法转换成了静态方法,静态方法中第一个默认参数self可以不用设置了,已经失去了在实例方法中self的特殊含义,成了一个普通的参数。# 静态方法可以不设置任何参数,既可以通过类名调用,也可以通过对象名调用。@staticmethoddef smoke(self):print '吸烟了',self

类方法的调用:既能通过类名直接调用,又能通过实例对象进行调用。类方法的第一个参数需要修改成cls,而cls接收的是当前类People,而不是对象。

不需要创建对象,就可以执行的一些操作,那么可以使用类方法。

People.work()
p1 = People('张三', 20)
p1.work()People.smoke('中华')
p1.smoke('黄金叶')
# class Student(object):
#     """docstring for Student"""
#     def __init__(self, name, score):
#         super(Student, self).__init__()
#         self.name = name
#         self.score = score#     # 打开文件的类方法
#     @classmethod
#     def open_file(cls):
#         file_test = open('student.txt', 'w')
#         print '文件打开成功'
#         return file_test#     # 定义一个实例方法,保存数据
#     def save_data(self, file_test):
#         file_test.write(self.name+' '+self.score+'\n')
#         print '数据写入成功'#     # 关闭文件的类方法
#     @classmethod
#     def close_file(cls, file_test):
#         file_test.close()
#         print '文件关闭成功'# # 1>通过类方法open_file()的执行,可以获取函数内部返回的file_test文件对象,并将其赋值给f变量。
# f = Student.open_file()# # 2>将f变量所保存的文件对象,继续传值给save_data()函数,用于调用write()函数写入数据。
# s1 = Student('张三', '80')
# s1.save_data(f)
# s2 = Student('李四', '69')
# s2.save_data(f)# # 3>将f变量所保存的文件对象,继续传值给close_file()类方法,用于关闭文件。
# Student.close_file(f)

使用类和对象封装一个工具类
date = ‘2017-12-10’
date = ‘2017/12/10’
date = ‘2017年12月10号’

class DateTool(object):"""负责提取年月日数据的工具类args:-- year: 用于保存年-- month: 用于保存月-- day: 用于保存日"""def __init__(self, year=0, month=0, day=0):super(DateTool, self).__init__()self.year = yearself.month = monthself.day = dayprint '3.初始化对象属性'# 定义个类方法,实现提取数据的逻辑@classmethoddef get_data(cls, date_string):# 判断date_string日期,是使用-连接的,还是/连接的if '-' in date_string:year, month, day = map(int, date_string.split('-'))elif '/' in date_string:year, month, day = map(int, date_string.split('/'))print '2.成功获取三个值'# 返回一个DateTool类型的对象,因为cls指代的就是DateTool这个类obj = cls(year,month,day)print '4.对象创建完成,开始返回对象'return objprint '1.开始转化'
date = DateTool.get_data('2017-12-10')
print '5.转化结束'print date.year
print date.month
print date.day

class_decorator相关推荐

  1. 自定义python框架_Python web 框架Sanic 学习: 自定义 Exception

    Sanic 是一个和类Flask 的基于Python3.5+的web框架,它使用了 Python3 异步特性,有远超 flask 的性能. 编写 RESTful API 的时候,我们会定义特定的异常错 ...

最新文章

  1. 力扣(LeetCode)刷题,简单题(第7期)
  2. java存储整数_关于数组:Java:存储大量整数的最佳数据类型是什么?
  3. JavaScript兼容HTML代码的注释
  4. 探讨:COCO2017数据集中包含很多目标被标注为一个框bbox,是标注错误吗?
  5. 使用Docker镜像和仓库
  6. php中括号的优先级是不是最高的,理解php中操作符的优先级和结合性
  7. html怎么给code标签添加语言,html code标签怎么用?html code标签的作用解释
  8. SpringMVC当中的 @Transactional(readOnly = true) 的作用
  9. PowerDesigner 建立约束
  10. 自家院子里能不能种桃树呢?
  11. 服务器的配置文档在哪里找,服务器端的数据库配置怎么找
  12. MYSQL主从复制操作文档
  13. h5学习笔记:写一个小表格
  14. SpringCloud教程汇总
  15. Photoshop CS6 破解
  16. matlab 文本框方向,ppt文本框文字方向为所有文字旋转的设置方法
  17. RuntimeError: Attempting to deserialize object on CUDA device 2 but torch.cuda.device_count() is 2.
  18. Vue.js 实战总结
  19. git+小乌龟安装教程。。
  20. 在R中统计数据的频数或者密度分布并图形化

热门文章

  1. C4D工程模板:地面上有水迹的材质
  2. 安卓导航车机root方法_飞歌Xenon2互联网音乐车机:震撼发“声”,再定义黄金音质...
  3. Java读写文本文件
  4. MFC串口(X64)CreateFile函数中LPCWSTR与CString的转化
  5. 行人检测-LUV颜色空间
  6. EAS判断单据是否存在下游单据
  7. ad禁止单层布线,禁止顶层布线
  8. RFID资产管理系统
  9. 苹果Macbook经常死机怎么办?
  10. 渐卦--鸿渐于陵,妇三岁不孕,终莫之胜