python基础学习-day28==课后作业练习

 一、今日作业: 
1.练习上课作业讲解的面向对象代码,明天默写
2.基于上课作业讲解的面向对象代码,扩写Student类
3.加入序列化与反序列化操作
4.对象之间的关联采用id号
5.可以通过id找到对应的文件,然后从文件中反序列化出执行的学校、班级、课程、学生对象
import uuid
import pickle
class School:
    school_name = 'OLDBOY'
    def __init__(self,nickname,address):
        self.uid = str(uuid.uuid4())
        self.nickname = nickname
        self.address = address
        self.classes = []
    def addclass(self,class_uid):
        self.classes.append(class_uid)
    def tell_class(self):
        print(self.nickname.center(60, '='))
        for class_uid in self.classes:
            with open(f'{class_uid}.pkl','rb')as f:
                res = pickle.load(f)
            res.tell_class()
    def save(self):
        with open(f'{self.uid}.pkl','wb')as f:
            pickle.dump(self,f)


class Class:
    def __init__(self,name):
        self.uid = str(uuid.uuid4())
        self.name = name
        self.course = None
    def addcourse(self,course_uid):
        self.course = course_uid
    def tell_class(self):
        print('班级名:%s  '%(self.name),end='')
        with open(f'{self.course}.pkl','rb')as f:
            res = pickle.load(f)
        res.tell_course()
    def save(self):
        with open(f'{self.uid}.pkl', 'wb')as f:
            pickle.dump(self, f)


class Course:
    def __init__(self, name, cycle, price):
        self.uid = str(uuid.uuid4())
        self.name = name
        self.cycle = cycle
        self.price = price
    def tell_course(self):
        print('课程名称:%s  课程周期:%s  课程价格:%s'%(self.name,self.cycle,self.price))
    def save(self):
        with open(f'{self.uid}.pkl', 'wb')as f:
            pickle.dump(self, f)

class Student:
    def __init__(self,name,age,id,sex):
        self.name = name
        self.age = age
        self.uid = str(uuid.uuid4())
        self.sex = sex
        self.score = 0
        self.course_uid = None
    def choice(self,course_uid):
        self.course_uid = course_uid
    def tell_student(self):
        print('id:%s 姓名:%s 年龄:%s 性别:%s 分数:%s '%(self.uid,self.name,self.age,self.sex,self.score),end='')
    def save(self):
        with open(f'{self.uid}.pkl', 'wb')as f:
            pickle.dump(self, f)

class Teacher:
    def __init__(self,name,age,salary,leve):
        self.uid = str(uuid.uuid4())
        self.name = name
        self.age = age
        self.salary = salary
        self.leve = leve
    def score(self,student_obj,grade):
        student_obj.score = grade
    def tell_teacher(self):
        print('姓名:%s 年龄:%s 薪资:%s 等级:%s '%(self.name,self.age,self.salary,self.leve),end='')
    def save(self):
        with open(f'{self.uid}.pkl', 'wb')as f:
            pickle.dump(self, f)

def get(id):
    with open(f'{id}.pkl','rb')as f:
        res = pickle.load(f)
        print(res.__dict__)


#创建学校对象
school_obj = School('老男孩魔都校区','上海')
#创建班级对象
class_obj = Class('14期')
class_obj2 = Class('15期')
#创建课程对象
course_obj = Course('python开发','5个月',1000)
course_obj2 = Course('luinex开发','1个月',10000)
#将班级对象的uid存到学校对象中
school_obj.addclass(class_obj.uid)
school_obj.addclass(class_obj2.uid)
#将课程对象的uid存到班级对象中
class_obj.addcourse(course_obj.uid)
class_obj2.addcourse(course_obj2.uid)
#保存对象
school_obj.save()
class_obj.save()
class_obj2.save()
course_obj.save()
course_obj2.save()
#打印数据
school_obj.tell_class()
#从文件中根据uid去出数据
get(school_obj.uid)
get(class_obj.uid)
get(course_obj.uid)


#创建学生对象
stu1 = Student('张三',18,2017050222,'')
#选课
stu1.choice(course_obj.uid)

teach1 = Teacher('李四',18,20000,'特级教师')
teach1.score(stu1,90)
stu1.save()
teach1.save()
stu1.tell_student()

 

posted @ 2020-04-09 20:54  sunshine如你  阅读(179)  评论(0编辑  收藏  举报