什么是组合
组合就是对象的某个属性是另一个类的对象
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()