zoukankan      html  css  js  c++  java
  • 组合

    什么是组合

    组合就是对象的某个属性是另一个类的对象

    class Foo:
        def __init__(self,bar):
            self.bar=bar
            
    class Bar:
        pass
    
    bar=Bar()
    f=Foo(bar)
    
    

    为什么使用组合

    组合可以减少代码冗余

    class Person:
        school='xxx'
        
    class Teacher(Person):
        def __init__(self,name,age,level,course_name,course_price,course_period):
            self.name=name
            self.age=age
            self.level=level
            
    class Student(Person):
        def __init__(self,name,age,course,course_name,course_price,course_period):
            self.name=name
            self.age=age
            self.course=course
            
    
    #通过组合解决代码冗余
    class Person:
        school='xxx'
    
    class Teacher(Person):
        def __init__(self,name,age,level,course):
            self.name=name
            self.age=age
            self.level=level
            # course是课程对象,表示老师教授的课程
            self.course=course
    
    class Student(Person):
        def __init__(self,name,age,course):
            self.name=name
            self.age=age
            # course是课程对象,表示学生选的课程
            self.course=course
    
    class Course:
        def __init__(self,course_name,course_price,course_period):
            self.name=course_name
            self.price=course_price
            self.period=course_period
    
    course=Course('python',20189,7)
    stu=Student('nick',18,course)
    print(stu.course.price)
    

    如何使用组合

    class Person:
        school='xxx'
    class Teacher(Person):
        def __init__(self,name,age,level,course):
            self.name=name
            self.age=age
            self.level=level
            # course是课程对象,表示老师教授的课程
            self.course=course
    
    class Student(Person):
        def __init__(self,name,age):
            self.name=name
            self.age=age
            # course是课程对象,表示学生选的课程
            self.course_list=[]
        def choose_course(self,course):
            # self.course=[]  #错误
            # 把课程对象追加到学生选课的列表中
            self.course_list.append(course)
        def tell_all_course(self):
            # 循环学生选课列表,每次拿出一个课程对象
            for course in self.course_list:
                print(course.name)
    
    class Course:
        def __init__(self,course_name,course_price,course_period):
            self.name = course_name
            self.price = course_price
            self.period = course_period
    
    course=Course('python',20101,7)
    stu1=Student('nick',19)
    stu1.choose_course(course)
    stu2=Student('王二丫',19)
    stu2.choose_course(course)
    stu2.choose_course(Course('linux',19999,5))
    
    #查看stu1选的所有课程名称
    #方式一(通过普通函数)
    def tell_all_course(student):
        for course in student.course_list:
            print(course.name)
    tell_all_course(stu1)
    tell_all_course(stu2)
    #方式二(通过对象的绑定方法)
    stu1.tell_all_course()
    stu2.tell_all_course()
    
  • 相关阅读:
    团购网站之大众点评
    cas xml
    smsUtil
    solr配置
    xml
    yu
    Schema.xml
    ApplicationContext-redis.xml
    fast
    第一版
  • 原文地址:https://www.cnblogs.com/aden668/p/11424985.html
Copyright © 2011-2022 走看看