继承json模块并派生新的功
继承json 模块中JSONEncoder,并派生出新的功能
本身json只能转化七大数据类型,如果转化对象是对象,将报错
default方法就是出现不能转化的就会报错,继承原父类功能,想更改其中一个函数
命名相同,添加if筛选,并且最终返回相应函数
import datetime,json class MyJson(json.JSONEncoder): def default(self, o): if isinstance(o,datetime.datetime): return datetime.datetime.strftime(o,'%Y-%m-%d %X') else: return super().default(self,o)#其他数据类型直接返回原函数 dict1= {'time':datetime.datetime.now()} res = json.dumps(dict1) print(res) print(type(res))
组合
组合:一个对象中包含另一个或多个对象,从而减少代码冗余
继承:继承是类与类的关系,子类继承父类属性与方法,子类与父类使用中从属关系
组合:组合是对象与对象的关系,一个对象拥有另一个对象的属性或方法,什么有什么的关系
class People: def __init__(self,name,age,sex): self.name= name self.age = age self.sex = sex class Teacher(People): def __init__(self,name,age,sex): super().__init__(name,age,sex) class Student(People): def __init__(self,name,age,sex): super().__init__(name,age,sex) class Date: def __init__(self,year,mouth,day): self.year = year self.mouth =mouth self.day = day def tell_birth(self): print(f""" 出生年月日 年:{self.year} 月:{self.mouth} 日:{self.day} """) stu1 = Student('TYS',18,'MAN') date_obj = Date(1993,5,31) stu1.date_obj = date_obj stu1.date_obj.tell_birth()
组合练习
练习需求:
选课系统:
1.有学生、老师类,学生与老师有属性 “名字、年龄、性别、课程”,
2.有方法 老师与学生可以添加课程, 打印学习/教授课程。
#创建父类,包含共有的特性姓名,年龄,性别,课程(添加课功能,打印课程表) class People: def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex def add_course(self,course_obj): self.course_list.append(course_obj) def tell_all_course_info(self): for course_obj in self.course_list: course_obj.tell_course_info() #建立学生类 class Student(People) : def __init__(self,name,age,sex): super().__init__(name,age,sex) self.course_list=[] #建立老师类 class Teacher(People) : def __init__(self,name,age,sex): super().__init__(name,age,sex) self.course_list=[] #建立课程类包含,课程表的属性,打印课程标的功能 class Course: def __init__(self,course_name,course_price,course_time): self.course_name = course_name self.course_price = course_price self.course_time = course_time def tell_course_info(self): print(f""" ======课程信息如下====== 课程名称:{self.course_name} 课程价格:{self.course_price} 课程周期:{self.course_time} """) #创建学生对象 stu1 = Student('TIAN',18,'MAN') #创建课程对象 python_obj = Course('Python',111,6) #学生对象添加课程对象 stu1.add_course(python_obj) stu1.tell_all_course_info()
封装
封装:把属性和功能封装在对象中
对象好比一个袋子,可以存放一堆属性和方法
存不是目的,目的是为了取,可以通多 对象. 的方式获取属性或方法
封装的目的:可以通过 对象. 的方法存放、获取属性或方法方便数据的存取
如何封装,类实例化,往对象传参
访问限制机制
访问限制机制:在类内部定义的变量名,函数名前边带有__ 的会被限制外部不能直接访问该属性原型,
其实是改变成: _类名__属性|方法
将一些隐私的数据隐藏起来,不让外部轻易获取、
可以将一堆数据封装成一个接口,可以让用户调用接口,并且通过相应的逻辑,最后再将数据返回给用户
class ATM: def __insert_card(self): print('开始插卡') def __input_pwd(self): print('输入密码') def __input__bal(self): print('输入金额') def __output_money(self): print('开始出钞') def __print_flow(self): print('打印流水') def withdraw(self): self.__insert_card() self.__input_pwd() self.__input__bal() self.__output_money() self.__print_flow() obj = ATM() obj.withdraw()
property
property:是一个装饰器,可以装饰在类内部的方法上,使其调用时无需加( ) 在某些情况下调用的方法只是为了或取方法计算后的值,去掉( )后 让方法看起来像调用属性