组合

一、组合

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

组合可以理解成多个人去造一个机器人,有的人造头、有的人造脚、有的人造手、有的人造躯干,大家都完工后,造躯干的人把头、脚、手拼接到自己的躯干上,因此一个机器人便造出来了

posted @ 2019-08-28 18:34  豆瓣酱瓣豆  阅读(288)  评论(0编辑  收藏  举报