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