继承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:是一个装饰器,可以装饰在类内部的方法上,使其调用时无需加( )
在某些情况下调用的方法只是为了或取方法计算后的值,去掉( )后
让方法看起来像调用属性