一、什么是组合
组合就是一个对象具有一个属性,这个属性的指是另外一个类的对象
二、为什么要使用组合
- 组合是用来解决类和类之间代码冗余问题的
- 最原始的选课系统
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))
来源:https://www.cnblogs.com/xichenHome/p/11439162.html