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

  

在昨天作业的基础之上

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

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

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

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}分')

  

posted @ 2020-04-09 21:22  清轩挽长风  阅读(105)  评论(0编辑  收藏  举报