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))