• 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()
  • 相关阅读:
    echo "不允许上传该类型的文件
    php构造函数,引入数据库操作类函数
    php函数描述及例子
    php如何判断远程文件是否存在
    多线程面试题系列(16):多线程十大经典案例之一 双线程读写队列数据
    多线程面试题系列(15):关键段,事件,互斥量,信号量的“遗弃”问题
    多线程面试题系列(14):读者写者问题继 读写锁SRWLock
    多线程面试体系列(13):多线程同步内功心法——PV操作下
    多线程面试题系列(12):多线程同步内功心法——PV操作上
    多线程面试题系列(11):读者写者问题
  • 原文地址:https://www.cnblogs.com/dingbei/p/12669505.html
Copyright © 2020-2023  润新知