zoukankan      html  css  js  c++  java
  • 4.9---菱形问题、property、继承练习

    一、菱形问题练习

    新式类下广度优先遍历

    # 练习一:
    class H:
        pass
    class G(H):
        pass
    class E(G):
        pass
    class C(G):
        pass
    class B(E):
        pass
    
    class F(H):
        pass
    class D(F):
        pass
    
    class A(B,C,D):
        pass
    
    print(A.mro())
    ''' 
    [<class '__main__.A'>, <class '__main__.B'>, <class '__main__.E'>, <class '__main__.C'>,
    <class '__main__.G'>, <class '__main__.D'>, <class '__main__.F'>, <class '__main__.H'>, <class 'object'>]
    '''
    print(A.__bases__)          
    # (<class '__main__.B'>, <class '__main__.C'>, <class '__main__.D'>)

     练习二:使用property与继承简化选课系统

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

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

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

    import uuid
    import pickle
    
    # 公共父类,用来存放相同的初始化操作,以及保存、添加列表操作
    class Father:
        school_name = "老男孩"
    
        def __init__(self,name):
            self.name = name
            self.id = uuid.uuid4()
            self.list = []
    
        def save(self):
            with open(f"db\{self.id}.pickle", mode="wb") as f:
                pickle.dump(self, f)
    
        def add_list(self,id):
            self.list.append(id)
    
    class School(Father):
        def __init__(self, nickname, address):
            Father.__init__(self,nickname)
            self.address = address
    
        def tell_class(self):
            print(self.name.center(50, "="))
            for class_id in self.list:
                with open(f"db\{class_id}.pickle", mode="rb") as f:
                    class_obj = pickle.load(f)
                class_obj.tell_course()
    
    class Class(Father):
        stu_list = []
        def relate_student(self, student_obj):
            self.stu_list.append(student_obj.id)
    
        def tell_course(self):
            print("%-10s " % self.name, end=" ")
            with open(f"db\{self.list[0]}.pickle", mode="rb") as f:
                course = pickle.load(f)
            print(course.info)
    
    class Course(Father):
        def __init__(self, name, time, cost):
            Father.__init__(self,name)
            self.time = time
            self.cost = cost
    
        @ property
        def info(self):
            course_info = "课程名:%-10s 时长:%s,费用:%s" % (self.name, self.time, self.cost)
            return course_info
    
    # 人物类,抽象出一个共同的人物类,来简化实例化的代码
    class People:               
        def __init__ (self,name,age,gender):
            self.name = name
            self.age = age
            self.gender = gender
            self.id = uuid.uuid4()
    
    class Student(People,Father):
        def __init__(self, name, age, gender, num):
            People.__init__(self,name,age,gender)
            self.num = num
            self.class_obj = None
    
        @ property
        def info(self):
            stu_info = "姓名:%-5s 年龄:%s 性别:%s,学号:%-5s" % (self.name, self.age, self.gender, self.num)
            return stu_info
    
        def chose_class(self, class_id):
            self.class_id = class_id
    
        def tell_class(self):
            print(f"学生【{self.name}】班级信息".center(50, "="))
            with open(f"class\{self.class_id}.pickle", mode="rb") as f:
                class_obj = pickle.load(f)
            class_obj.tell_course()
            
    class Teacher(People,Father):
        def __init__(self,name,age,gender,salary,rank):
            People.__init__(self,name,age,gender)
            self.salry = salary
            self.rank = rank
            self.stu_dic = {}
    
        def score(self, student_obj, grade):
            student_obj.score = grade
            self.stu_dic[student_obj.name] = grade
    
        @ property
        def info(self):
            tea_info = "姓名:%-5s 年龄:%s 性别:%s,薪资:%s,等级:%-5s" % (self.name, self.age, self.gender, self.salry,self.rank)
            return tea_info
    
    # 实例化对象
    stu1 = Student("Jil", 18, "mal", 1118)
    s1 = School("猪猪校区", "上海徐汇")
    c1 = Class("猪猪基础班")
    c2 = Class("猪猪进阶班")
    course1 = Course("猪的自我修养", "6 months", 20000)
    course2 = Course("养猪宝典", "5 months", 18000)
    
    t1 = Teacher("Egon",25,"male",50000,"天字一号")
    
    
    # 关联
    s1.add_list(c1.id)
    s1.add_list(c2.id)
    c1.add_list(course1.id)
    c2.add_list(course2.id)
    
    # 存入文件
    s1.save()
    c1.save()
    c2.save()
    course1.save()
    course2.save()
    stu1.save()
    
    s1.tell_class()
  • 相关阅读:
    关于高等代数的证明题
    关于微小摄动法的专题讨论
    关于数学分析的数学竞赛题
    关于高等代数的数学竞赛题
    关于幂等阵与幂幺阵的专题讨论
    关于幂零阵与秩1阵的专题讨论
    关于可交换阵与数量阵的专题讨论
    关于等价标准形的专题讨论
    css制作圣诞树
    Integer.parseInt() 错误
  • 原文地址:https://www.cnblogs.com/zhubincheng/p/12669950.html
Copyright © 2011-2022 走看看