作业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}
" % (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, "=")+"
"
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 = "{} ".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 = "[{} {} {}]
".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 "姓名:{} 年龄:{} 学号:{} 性别:{}
".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}
" % (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, "=") + "
"
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 = "{} ".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 = "[{} {} {}]
".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 "姓名:{} 年龄:{} 学号:{} 性别:{}
".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}
" % (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, "=") + "
"
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 = "{} ".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 = "[{} {} {}]
".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 "姓名:{} 年龄:{} 学号:{} 性别:{}
".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()