4.9作业
试验菱形问题下的属性查找顺序
class g(object): def test(self): print('from g') # pass print(g.__bases__) class e(g): def test(self): print('from e') # pass class b(e): def test(self): print('from b') # pass class f(g): def test(self): print('from f') # pass class c(f): def test(self): print('from c') # pass class d(g): def test(self): print('from d') # pass class a(b, c, d): def test(self): print('from a') obj = a() # (<class 'object'>,) obj.test() # a->b->e-c-f-d->g-object # from a
在昨天作业的基础之上
-
引入属性访问控制+property
-
引入继承与派生的概念来减少代码冗余
注意:要满足什么"是"什么的关系,不满足"是"的关系不要去继承
class School: def __init__(self,name,address): self.__name = name self.__address = address self.__grade = [] @ property def school(self): return f"校区名:{self.__name} 校区地址:{self.__address}" @ school.setter def school(self,obj): self.__name = obj.__name self.__address = obj.__address @ school.deleter def school(self): del self.__name del self.__address def add_grade(self,grade_obj): self.__grade.append(grade_obj) def grade_info(self): print(self.__name.center(60,"-")) for grade_obj in self.__grade: grade_obj.grade_info() class Grade(School): def __init__(self,classroom,name,address): School.__init__(name,address) self.__classroom = classroom self.course = [] @ property def class_info(self): return f'教室:{self.__name} 教室所在地区:{self.__address}' @ class_info.setter def class_info(self,obj): self.__name = obj.name self.__address = obj.address @ class_info.deleter def class_info(self): del self.__name del self.__address def add_course(self,obj): self.course.append(obj) def course_info(self): print(self.__name.center(60,"-")) for course_obj in self.course: course_obj.course_info() class Course(): def __init__(self,name,data,price): self.__name = name self.__data = data self.__price = price @ property def course_info(self): return f"课程名:{self.__name},课程周期:{self.__data},课程价格:{self.__price}" @ course_info.setter def course_info(self,obj): self.__name = obj.name self.__data = obj.data self.__price = obj.price @ course_info.deleter def course_info(self): del self.__name del self.__data del self.__price class Student: def __init__(self,school,name,age,id): self.__school = school self.__name = name self.__age = age self.__id = id @ property def student_info(self): return f"学校:{self.__school},学生姓名:{self.__name},年龄:{self.__age},学号:{self.__id}" @ student_info.setter def student_info(self,obj): self.__school = obj.school self.__name = obj.name self.__age = obj.age self.__id = obj.id def class_info(self,obj): obj.class_info() class Teacher: def __init__(self,name,age,salary,grade): self.name=name self.age=age self.salary=salary self.grade=grade @property def teacher_info(self): return (f'{self.name}老师,年龄为{self.age},薪资为{self.salary},等级为{self.grade}') @teacher_info.setter def teacher_info(self,obj): self.name=obj.name self.age=obj.age self.salary=obj.salary self.grade=obj.grade @teacher_info.deleter def teacher_info(self): del self.name del self.age del self.salary del self.grade def get_grade(self,student_name,grade): print(f'{self.name}给{student_name}打了{grade}分')