class_decorator

coding:utf-8

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

class People(object):
    """docstring for People"""
    def __init__(self, name, age):
        super(People, self).__init__()
        self.name = name
        self.age = age

    # 只能由对象才能调用的函数,称为实例方法
    def eat(self):
        print '吃饭了'

    # 将一个实例方法,转化成了一个类方法
    @classmethod
    def work(cls):
        print '工作了 = ',cls

    # 实例方法转换成了静态方法,静态方法中第一个默认参数self可以不用设置了,已经失去了在实例方法中self的特殊含义,成了一个普通的参数。
    # 静态方法可以不设置任何参数,既可以通过类名调用,也可以通过对象名调用。
    @staticmethod
    def 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 = year
        self.month = month
        self.day = day
        print '3.初始化对象属性'

    # 定义个类方法,实现提取数据的逻辑
    @classmethod
    def 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 obj


print '1.开始转化'
date = DateTool.get_data('2017-12-10')
print '5.转化结束'

print date.year
print date.month
print date.day
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值