作业 —— day29

作业一:自己试验一下菱形问题下的属性查找顺序

class X(object):
    def test(self):
        print('from X')
    pass


class Y(X):
    def test(self):
        print('from Y')
    pass


class Z(X):
    # def test(self):
    #     print('from Z')
    pass


class A(Z, Y):
    # def test(self):
    #     print('from A')
    pass

#
print(A.mro())  # 类D以及类D的对象访问属性都是参照该类的mro列表
# 输出:[<class '__main__.D'>, <class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>]

obj = A()
obj.test()        # from Y

# 查找顺序:A ==> Z ==> Y ==> X ==> object

作业二:在昨天作业的基础之上

1、引入属性访问控制+property

2、引入继承与派生的概念来减少代码冗余

注意:要满足什么"是"什么的关系,不满足"是"的关系不要去继承
import uuid
import pickle


class Info:
    def __init__(self, name):
        self.name = name
        self.uid = str(uuid.uuid4())

    @property
    def save(self):
        with open(f'info/{self.uid}.pickle', mode='wb')as f:
            pickle.dump(self, f)

    @property
    def get(self):
        with open(f'info/{self.uid}.pickle', mode='rb')as f:
            res = pickle.load(f)
            print(res.__dict__)


# 学校(校区名、地址、关联班级列表)
class School(Info):
    def __init__(self, name, address):
        Info.__init__(self, name)
        self.address = address
        self.class_list = []

    @property
    def show_school_info(self):
        print(f'校区信息 | 名称:{self.name} 地址:{self.address}')
        for class_id in self.class_list:
            with open(f'info/{self.uid}.pickle', mode='rb') as f:
                class_obj = pickle.load(f)
                class_obj.show_class_info()


    # 校区创建完毕后,可以为每个校区关联班级
    def related_class(self, class_obj):
        self.class_list.append(class_obj.id)


# 班级(名称、所在校区、关联课程列表)
class Class(Info):
    def __init__(self, name, school):
        Info.__init__(self, name)
        self.id = uuid.uuid4()
        self.school = school
        self.course_list = []

    def show_class_info(self):
        print(f'    班级信息 | 名称:{self.name} 校区:{self.school}')


    # 班级创建完毕后,可以为每个班级关联课程
    def related_course(self, course_obj):
        self.course_list.append(course_obj.id)


# 课程(课程名、周期、价格)
class Course(Info):
    def __init__(self, name, period, price):
        Info.__init__(self, name)
        self.id = uuid.uuid4()
        self.period = period
        self.price = price

    def show_course_info(self):
        print(f'课程信息 | 名称:{self.name} 周期:{self.period} 价格:{self.price}')



# 学生(所在校区、名字、年龄、学号、性别、选择课程)
class Student(Info):
    def __init__(self, school, name, age, stu_id, gender):
        Info.__init__(self, name)
        self.school = school
        self.age = age
        self.id = uuid.uuid4()
        self.gender = gender
        self.stu_id = stu_id
        self.class_name = []

    def show_student_info(self):
        print(
            f'学生信息 | 姓名:{self.name} 校区:{self.school} 年龄:{self.age} 学号:{self.stu_id} 性别:{self.gender} 已选课程:{self.class_name}')

    def choose_class(self, class_name):
        self.class_name = class_name


# 老师(名字、年龄、薪资、等级、给学生评分)
class Teacher(Info):
    def __init__(self, name, age, salary, level):
        Info.__init__(self, name)
        self.id = uuid.uuid4()
        self.salary = salary
        self.age = age
        self.level = level

    def show_teacher_info(self):
        print(f'老师信息 | 姓名:{self.name} 年龄:{self.age} 薪资:{self.salary} 等级:{self.level}')

    def student_score(self, student_obj, score):
        student_obj.score = score


# 创建学校对象(校区名、地址、关联班级列表)
school_obj1 = School('老男孩上海校区', '上海市青浦区')
school_obj2 = School('老男孩北京校区', '北京市海淀区')

# 序列化保存学校信息
school_obj1.save
school_obj2.save

# 创建班级对象(名称、所在校区)
class_obj1 = Class('脱产14期', '上海校区')
class_obj2 = Class('脱产15期', '上海校区')
class_obj3 = Class('脱产29期', '北京校区')

# 序列化保存班级信息
class_obj1.save
class_obj2.save
class_obj3.save

# 关联学校和班级
school_obj1.related_class(class_obj1)
school_obj1.related_class(class_obj2)
school_obj2.related_class(class_obj3)

# 反序列化得到班级信息
school_obj1.show_school_info
school_obj2.show_school_info

# 创建课程对象(课程名、周期、价格)
course_obj1 = Course('egon养成培训', '6-month', 10)
course_obj2 = Course('单身狗的养成', '3-month', 998)

# 序列化保存学校信息
course_obj1.save
course_obj2.save

# 创建学生对象(所在校区、名字、年龄、学号、性别、选择课程)
student_obj1 = Student('老男孩上海校区', '真·egon真身', 18, 2020001, 'male')
student_obj2 = Student('老男孩上海校区', 'egon试验品1', 19, 2020002, 'male')
student_obj3 = Student('老男孩北京校区', 'egon试验品2', 78, 2020003, 'female')

# 序列化保存班级信息
student_obj1.save
student_obj2.save
student_obj3.save

# 关联学校和班级
student_obj1.choose_class(course_obj1)
student_obj2.choose_class(course_obj1)
student_obj3.choose_class(course_obj2)

# 反序列化得到班级信息
student_obj1.show_student_info
student_obj2.show_student_info
student_obj3.show_student_info
posted @ 2020-04-09 22:56  轻描丨淡写  阅读(187)  评论(0编辑  收藏  举报