码迷,mamicode.com
首页 > 其他好文 > 详细

4.8---面向对象练习2

时间:2020-04-08 22:15:53      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:pen   mode   nic   time   之间   sse   cos   %s   imp   

 

改写要求:

# 1、基于面向对象代码,扩写Student类
# 2、加入序列化与反序列化操作
# 3、对象之间的关联采用id号
# 4、可以通过id找到对应的文件,然后从文件中反序列化出执行的学校、班级、课程、学生对象

 

类定义部分:

import uuid
import pickle

class School:
    school_name = "老男孩"

    def __init__(self,nickname,address):
        self.nickname = nickname
        self.address = address
        self.classes = []
        self.id = uuid.uuid4()

    def relate_class(self,class_obj):
        self.classes.append(class_obj.id)

    def save(self):
        with open(f"db\school\\{self.id}.pickle",mode="wb") as f:
            pickle.dump(self,f)


    def tell_class(self):
        print(self.nickname.center(50,"="))
        for class_id in self.classes:
            with open(f"db\class\\{class_id}.pickle", mode="rb") as f:
                class_obj = pickle.load(f)
            class_obj.tell_course()

class Class:
    def __init__(self,name):
        self.name = name
        self.course = None
        self.student = []
        self.id = uuid.uuid4()
        self.school = None

    def relate_course(self,course_obj):
        self.course = course_obj.id
        
    def relate_student(self,student_obj):
        self.student.append(student_obj.id)

    def save(self):
        with open(f"db\class\\{self.id}.pickle",mode="wb") as f:
            pickle.dump(self,f)

    def tell_course(self):
        print("%-10s " %self.name,end=" ")
        with open(f"db\course\\{self.course}.pickle",mode="rb") as f:
            course = pickle.load(f)
        course.tell_info()


class Course:
    def __init__(self,name,time,cost):
        self.name = name
        self.time = time
        self.cost = cost
        self.id = uuid.uuid4()

    def tell_info(self):
        print("课程名:%-10s 时长:%s,费用:%s" %(self.name,self.time,self.cost))

    def save(self):
        with open(f"db\course\\{self.id}.pickle",mode="wb") as f:
            pickle.dump(self,f)


class Student:
    def __init__(self,name,age,gender,num):
        self.name = name
        self.age = age
        self.gender = gender
        self.num = num
        self.class_obj = None
        self.id = uuid.uuid4()

    def tell_info(self):
        print("姓名:%-5s 年龄:%s 性别:%s,学号:%-5s"%(self.name,self.age,self.gender,self.num))

    def chose_class(self,class_obj):
        self.class_obj = class_obj.id
        class_obj.student.append(self.id)

    def save(self):
        with open(f"db\student\\{self.id}.pickle", mode="wb") as f:
            pickle.dump(self, f)

    def tell_class(self):
        print(f"学生【{self.name}】班级信息".center(50,"="))
        with open(f"db\class\\{self.class_obj}.pickle",mode="rb") as f:
            class_obj = pickle.load(f)
        class_obj.tell_course()

 

实例化部分:

# 实例化对象       
stu1 =Student("Jil",18,"mal",1118)
s1 = School("猪猪校区","上海徐汇")
c1 = Class("猪猪基础班")
c2 = Class("猪猪进阶班")
course1 = Course("猪的自我修养","6 months",20000)
course2 = Course("鱼丸捕捉十式","5 months",18000)

# 关联
s1.relate_class(c1)
s1.relate_class(c2)
c1.relate_course(course1)
c2.relate_course(course2)

# 学生选班级
stu1.chose_class(c1)

# 存入文件
s1.save()
c1.save()
c2.save()
course1.save()
course2.save()
stu1.save()

# 查看
s1.tell_class()
c1.tell_course()
stu1.tell_class()

 

4.8---面向对象练习2

标签:pen   mode   nic   time   之间   sse   cos   %s   imp   

原文地址:https://www.cnblogs.com/zhubincheng/p/12663199.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!