一、组合
1.1什么是组合
对象的某个属性是另外一个类的对象,就是一个类的对象具备某一个属性,该属性的值是指向另外一个类的对象
1.1.1组合的概念
class Foo:
def __init__(self,bar):
self.bar = bar
class Bar:
pass
bar = Bar()
f = Foo(bar)
1.1 为什么使用组合
可以减少代码的冗余
class Person:
school = 'oldbody'
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('chen',19,course)
teacher = Teacher('chen',19,'高级',course)
print(teacher.course.name)
1.2如何使用
class Person:
school = 'oldbody'
class Teacher(Person):
def __init__(self,name,age,level,course):
self.name = name
self.age = age
self.level = level
self.course = course
class Stundent(Person):
def __init__(self,name,age):
self.name = name
self.age = age
self.course_list = []
def choose_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,cour_price,cour_peroid):
self.name = course_name
self.price = cour_price
self.period = cour_peroid
course = Course('python',201999,7)
stu1 = Stundent('nick',18)
stu1.choose_course(course)
stu2 = Stundent('chen',19)
stu2.choose_course(course)
stu2.choose_course(Course('linx',19999,5))
# 查看stu1选择的所有课程名称
#方式一(通过普通函数)
def tell_all_course(student):
for course in student.course_list:
print(course.name)
tell_all_course(stu1)
#
python
#方式二(通过对象的绑定方法)
stu2.tell_all_course()
#
python
linx
组合可以理解成多个人去造一个机器人,有的人造头、有的人造脚、有的人造手、有的人造躯干,大家都完工后,造躯干的人把头、脚、手拼接到自己的躯干上,因此一个机器人便造出来了