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

      

  • 相关阅读:
    409. Longest Palindrome(计算一组字符集合可以组成的回文字符串的最大长度)
    242. Valid Anagram(两个字符串包含的字符是否完全相同)
    17. Letter Combinations of a Phone Number(电话号码的字母组合)
    模块XML真垃圾
    数据库是什么
    python项目开发规范
    面向对象之类的成员
    面向对象
    模块之 import os 模块一
    模块之序列化 import json
  • 原文地址:https://www.cnblogs.com/Tornadoes-Destroy-Parking-Lots/p/12669654.html
Copyright © 2020-2023  润新知