087 类的组合

一、什么是组合

组合就是一个对象具有一个属性,这个属性的指是另外一个类的对象

二、为什么要使用组合

  • 组合是用来解决类和类之间代码冗余问题的
  • 最原始的选课系统
class Person:
    school = 'oldboy'

    
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 = 'oldboy'

    
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:
    # 把这个course类实例化过后,在实例化老师或者学生的时候,当作属性的值传递给老师或学生的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',20180,7) # 实例化课程对象
stu=Student('nick',19,course) # 实例化学生对象:course是课程对象
teacher=Teacher('nick',19,'高级',course) # 实例化老师对象:course是课程对象
#查看老师教授的课程名
print(teacher.course.name)

python

  • 终极版本选课系统
  • 可以让一个学生选择多门课程
class Person:
    school = 'oldboy'
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):
    # course=[]  #在这里定义成course是了列表是错误的
    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:
            #课程对象.name  取到课程名字
            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',20199,7)# 实例化课程对象course
stu1=Student('nick',19) # 实例化学生对象stu1
stu1.choose_course(course)# 调用stu1的选课绑定方法choose_course(course)
# 把实例化的课程对象放到stu1的课程属性列表里

stu2=Student('王二丫',19)# 实例化stu2学生对象
stu2.choose_course(course)# 调用stu2的选课绑定方法choose_course(course)
# 把实例化的课程对象放到stu2的课程属性列表里

stu2.choose_course(Course('linux',19999,5))

猜你喜欢

转载自www.cnblogs.com/xichenHome/p/11439162.html