作业23

第一题

# 作业一:试验菱形问题下的属性查找顺序
class A:
    pass


class B(A):
    pass


class C(B):
    pass


class D(B):
    pass


class E(A):
    pass


class F(A):
    pass


class G(E):
    pass


class H(C, D, G, F):
    pass


class I(H):
    pass


class J(H):
    pass


# print(J.mro())
# print(H.mro())

第二题

Father不隐藏版

# 作业二:在昨天作业的基础之上
#    1、引入属性访问控制+property
#    2、引入继承与派生的概念来减少代码冗余
#       注意:要满足什么"是"什么的关系,不满足"是"的关系不要去继承

import pickle
import uuid


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

    def save_data(self):
        with open("{}.pkl".format(self.uid), "wb") as f:
            pickle.dump(self, f)
        with open("{}".format(self.__class__.__name__), "a", encoding="utf-8") as f:
            f.write("{%s:%s}\n" % (self.name, self.uid))




class School(Father):
    __school_name = "old boy"

    def __init__(self, name, adr):
        Father.__init__(self,name)
        self.__adr = adr
        self.__classes = []

    @property
    def school_info(self):
        school_info = "{}({})".format(self.name, self.__adr).center(50, "=")+"\n"
        for class_uid in self.__classes:
            with open("{}.pkl".format(class_uid), "rb") as f:
                class_obj = pickle.load(f)
            school_info += class_obj.class_info
            school_info += class_obj.students_info
        return school_info

    def relate_class(self, class_obj):
        self.__classes.append(class_obj.uid)




class Class(Father):
    def __init__(self, name):
        Father.__init__(self,name)
        self.__courses = []
        self.students = []

    @property
    def class_info(self):
        class_info = "{}\t".format(self.name)
        for course_uid in self.__courses:
            with open("{}.pkl".format(course_uid), "rb") as f:
                course_obj = pickle.load(f)
            class_info += course_obj.course_info
        return class_info

    def relate_course(self, course_obj):
        self.__courses.append(course_obj.uid)

    @property
    def students_info(self):
        students_info = ""
        for stu_obj_uid in self.students:
            with open("{}.pkl".format(stu_obj_uid), "rb") as f:
                stu_obj = pickle.load(f)
            students_info += stu_obj.stu_info
        return students_info




class Course(Father):
    def __init__(self, name, period, price):
        Father.__init__(self,name)
        self.__period = period
        self.__price = price

    @property
    def course_info(self):
        course_info = "[{}   {}  {}]\n".format(self.name, self.__period, self.__price)
        return course_info




class Student(Father):
    def __init__(self, name, age, num, gender):
        Father.__init__(self,name)
        self.__age = age
        self.__num = num
        self.__gender = gender
        self.__class_obj = None

    def relate_class(self, class_obj):
        self.__class_obj = class_obj
        class_obj.students.append(self.uid)

    @property
    def stu_info(self):
        return "姓名:{}    年龄:{}    学号:{}    性别:{}\n".format(self.name, self.__age, self.__num, self.__gender)




# 创建新校区,班级,课程,学生
school_obj1 = School("老男孩魔都校区", "上海虹桥")
school_obj2 = School("老男孩帝都校区", "北京某某")
class_obj1 = Class("上海脱产14期")
class_obj2 = Class("上海脱产15期")
class_obj3 = Class("北京脱产29期")
course_obj1 = Course("python全栈开发", "5 mon", 22000)
course_obj2 = Course("linux 运维课程", "4 mon", 20000)
stu1 = Student("wu", 22, 1, "male")
stu2 = Student("egon", 24, 2, "female")
stu3 = Student("tank", 26, 3, "male")
stu4 = Student("ha", 28, 4, "female")

# 校区关联班级
school_obj1.relate_class(class_obj1)
school_obj1.relate_class(class_obj2)
school_obj2.relate_class(class_obj3)
# 班级关联课程
class_obj1.relate_course(course_obj1)
class_obj2.relate_course(course_obj2)
class_obj3.relate_course(course_obj1)
# 学生选择班级
stu1.relate_class(class_obj1)
stu2.relate_class(class_obj2)
stu3.relate_class(class_obj2)
stu4.relate_class(class_obj3)
#
#
# # 查看uuid
# print(school_obj1.uid)
# print(school_obj2.uid)
# print(class_obj1.uid)
# print(class_obj2.uid)
# print(class_obj3.uid)
# print(course_obj1.uid)
# print(course_obj2.uid)
# print(stu1.uid)
# print(stu2.uid)
# print(stu3.uid)
# print(stu4.uid)
#
# print(school_obj1.__dict__)
# 保存信息
school_obj1.save_data()
school_obj2.save_data()
class_obj1.save_data()
class_obj2.save_data()
class_obj3.save_data()
course_obj1.save_data()
course_obj2.save_data()
stu1.save_data()
stu2.save_data()
stu3.save_data()
stu4.save_data()

# # 输出信息
print(school_obj1.school_info)
# school_obj1.show_school()
# school_obj2.show_school()
# class_obj1.show_students()

Father类内隐藏属性版-----1

import pickle
import uuid


class Father:
    def __init__(self, name):
        self.__uid = uuid.uuid4()
        self.__name = name

    def save_data(self):
        with open("{}.pkl".format(self.__uid), "wb") as f:
            pickle.dump(self, f)
        with open("{}".format(self.__class__.__name__), "a", encoding="utf-8") as f:
            f.write("{%s:%s}\n" % (self.__name, self.__uid))


class School(Father):
    __school_name = "old boy"

    def __init__(self, name, adr):
        Father.__init__(self, name)
        self.__adr = adr
        self.__classes = []

    @property
    def school_info(self):
        school_info = "{}({})".format(self._Father__name, self.__adr).center(50, "=") + "\n"
        for class_uid in self.__classes:
            with open("{}.pkl".format(class_uid), "rb") as f:
                class_obj = pickle.load(f)
            school_info += class_obj.class_info
            school_info += class_obj.students_info
        return school_info

    def relate_class(self, class_obj):
        self.__classes.append(class_obj._Father__uid)


class Class(Father):
    def __init__(self, name):
        Father.__init__(self, name)
        self.__courses = []
        self.__students = []

    @property
    def class_info(self):
        class_info = "{}\t".format(self._Father__name)
        for course_uid in self.__courses:
            with open("{}.pkl".format(course_uid), "rb") as f:
                course_obj = pickle.load(f)
            class_info += course_obj.course_info
        return class_info

    def relate_course(self, course_obj):
        self.__courses.append(course_obj._Father__uid)

    @property
    def students_info(self):
        students_info = ""
        for stu_obj_uid in self.__students:
            with open("{}.pkl".format(stu_obj_uid), "rb") as f:
                stu_obj = pickle.load(f)
            students_info += stu_obj.stu_info
        return students_info


class Course(Father):
    def __init__(self, name, period, price):
        Father.__init__(self, name)
        self.__period = period
        self.__price = price

    @property
    def course_info(self):
        course_info = "[{}   {}  {}]\n".format(self._Father__name, self.__period, self.__price)
        return course_info


class Student(Father):
    def __init__(self, name, age, num, gender):
        Father.__init__(self, name)
        self.__age = age
        self.__num = num
        self.__gender = gender
        self.__class_obj = None

    def relate_class(self, class_obj):
        self.__class_obj = class_obj
        class_obj._Class__students.append(self._Father__uid)

    @property
    def stu_info(self):
        return "姓名:{}    年龄:{}    学号:{}    性别:{}\n".format(self._Father__name, self.__age, self.__num, self.__gender)


# 创建新校区,班级,课程,学生
school_obj1 = School("老男孩魔都校区", "上海虹桥")
school_obj2 = School("老男孩帝都校区", "北京某某")
class_obj1 = Class("上海脱产14期")
class_obj2 = Class("上海脱产15期")
class_obj3 = Class("北京脱产29期")
course_obj1 = Course("python全栈开发", "5 mon", 22000)
course_obj2 = Course("linux 运维课程", "4 mon", 20000)
stu1 = Student("wu", 22, 1, "male")
stu2 = Student("egon", 24, 2, "female")
stu3 = Student("tank", 26, 3, "male")
stu4 = Student("ha", 28, 4, "female")

# 校区关联班级
school_obj1.relate_class(class_obj1)
school_obj1.relate_class(class_obj2)
school_obj2.relate_class(class_obj3)
# 班级关联课程
class_obj1.relate_course(course_obj1)
class_obj2.relate_course(course_obj2)
class_obj3.relate_course(course_obj1)
# 学生选择班级
stu1.relate_class(class_obj1)
stu2.relate_class(class_obj2)
stu3.relate_class(class_obj2)
stu4.relate_class(class_obj3)
#
#
# # 查看uuid
# print(school_obj1.uid)
# print(school_obj2.uid)
# print(class_obj1.uid)
# print(class_obj2.uid)
# print(class_obj3.uid)
# print(course_obj1.uid)
# print(course_obj2.uid)
# print(stu1.uid)
# print(stu2.uid)
# print(stu3.uid)
# print(stu4.uid)
#
print(school_obj1.__dict__)
# # 保存信息
school_obj1.save_data()
school_obj2.save_data()
class_obj1.save_data()
class_obj2.save_data()
class_obj3.save_data()
course_obj1.save_data()
course_obj2.save_data()
stu1.save_data()
stu2.save_data()
stu3.save_data()
stu4.save_data()

# # 输出信息
print(school_obj1.school_info)

Father类内隐藏属性版-----2

import pickle
import uuid


class Father:
    def __init__(self, name):
        self.__uid = uuid.uuid4()
        self.__name = name

    def save_data(self):
        with open("{}.pkl".format(self.__uid), "wb") as f:
            pickle.dump(self, f)
        with open("{}".format(self.__class__.__name__), "a", encoding="utf-8") as f:
            f.write("{%s:%s}\n" % (self.__name, self.__uid))

    @property
    def name(self):
        return self.__name

    @property
    def uid(self):
        return self.__uid


class School(Father):
    __school_name = "old boy"

    def __init__(self, name, adr):
        Father.__init__(self, name)
        self.__adr = adr
        self.__classes = []

    @property
    def school_info(self):
        school_info = "{}({})".format(self.name, self.__adr).center(50, "=") + "\n"
        for class_uid in self.__classes:
            with open("{}.pkl".format(class_uid), "rb") as f:
                class_obj = pickle.load(f)
            school_info += class_obj.class_info
            school_info += class_obj.students_info
        return school_info

    def relate_class(self, class_obj):
        self.__classes.append(class_obj.uid)


class Class(Father):
    def __init__(self, name):
        Father.__init__(self, name)
        self.__courses = []
        self.__students = []

    @property
    def class_info(self):
        class_info = "{}\t".format(self.name)
        for course_uid in self.__courses:
            with open("{}.pkl".format(course_uid), "rb") as f:
                course_obj = pickle.load(f)
            class_info += course_obj.course_info
        return class_info

    def relate_course(self, course_obj):
        self.__courses.append(course_obj.uid)

    @property
    def students_info(self):
        students_info = ""
        for stu_obj_uid in self.__students:
            with open("{}.pkl".format(stu_obj_uid), "rb") as f:
                stu_obj = pickle.load(f)
            students_info += stu_obj.stu_info
        return students_info

    @property
    def students(self):
        return self.__students


class Course(Father):
    def __init__(self, name, period, price):
        Father.__init__(self, name)
        self.__period = period
        self.__price = price

    @property
    def course_info(self):
        course_info = "[{}   {}  {}]\n".format(self.name, self.__period, self.__price)
        return course_info


class Student(Father):
    def __init__(self, name, age, num, gender):
        Father.__init__(self, name)
        self.__age = age
        self.__num = num
        self.__gender = gender
        self.__class_obj = None

    def relate_class(self, class_obj):
        self.__class_obj = class_obj
        class_obj.students.append(self.uid)

    @property
    def stu_info(self):
        return "姓名:{}    年龄:{}    学号:{}    性别:{}\n".format(self.name, self.__age, self.__num, self.__gender)


# 创建新校区,班级,课程,学生
school_obj1 = School("老男孩魔都校区", "上海虹桥")
school_obj2 = School("老男孩帝都校区", "北京某某")
class_obj1 = Class("上海脱产14期")
class_obj2 = Class("上海脱产15期")
class_obj3 = Class("北京脱产29期")
course_obj1 = Course("python全栈开发", "5 mon", 22000)
course_obj2 = Course("linux 运维课程", "4 mon", 20000)
stu1 = Student("wu", 22, 1, "male")
stu2 = Student("egon", 24, 2, "female")
stu3 = Student("tank", 26, 3, "male")
stu4 = Student("ha", 28, 4, "female")

# 校区关联班级
school_obj1.relate_class(class_obj1)
school_obj1.relate_class(class_obj2)
school_obj2.relate_class(class_obj3)
# 班级关联课程
class_obj1.relate_course(course_obj1)
class_obj2.relate_course(course_obj2)
class_obj3.relate_course(course_obj1)
# 学生选择班级
stu1.relate_class(class_obj1)
stu2.relate_class(class_obj2)
stu3.relate_class(class_obj2)
stu4.relate_class(class_obj3)
#
#
# # 查看uuid
# print(school_obj1.uid)
# print(school_obj2.uid)
# print(class_obj1.uid)
# print(class_obj2.uid)
# print(class_obj3.uid)
# print(course_obj1.uid)
# print(course_obj2.uid)
# print(stu1.uid)
# print(stu2.uid)
# print(stu3.uid)
# print(stu4.uid)
#
print(school_obj1.__dict__)
# # 保存信息
school_obj1.save_data()
school_obj2.save_data()
class_obj1.save_data()
class_obj2.save_data()
class_obj3.save_data()
course_obj1.save_data()
course_obj2.save_data()
stu1.save_data()
stu2.save_data()
stu3.save_data()
stu4.save_data()

# # 输出信息
print(school_obj1.school_info)
# school_obj1.show_school()
# school_obj2.show_school()
# class_obj1.show_students()

 posted on 2020-04-09 22:16  wwwpy  阅读(89)  评论(0编辑  收藏  举报