类的组合

一、什么是组合

  • 组合就是一个类的对象具备某一个属性,该属性的值是另一个类的对象

1.1 组合的概念

class Foo:
    def __init__(self,bar):
        self.bar=bar

class Bar:
    pass

bar=Bar()	# 实例化对象
# f=Foo(Bar())	# 实例化对象并 传对象进行初始化
f=Foo(bar)	# 

之前咱们说过。对象添加属性的两种方式。其中一种就是组合,只不过添加的不是属性,而是一个对象。

二、如何使用组合

  • 组合是用来解决类与类之间代码冗余的问题

2.1 通过init初始化方法

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:
    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('xc',19,course)	# 实例化学生类,并传参,添加对象进行组合
teacher=Teacher('xc',19,'高级',course) # 实例化教师类,并传参,添加对象进行组合

三、什么时候用组合?什么时候用继承?

它和继承很像,但又不同。

1.继承的方式

通过继承建立了派生类与基类之间的关系,它是一种'是'的关系,比如白马是马,人是动物。

当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好,比如老师是人,学生是人

2.组合的方式

用组合的方式建立了类与组合的类之间的关系,它是一种‘有’的关系,比如教授有生日,教授教python和linux课程,教授有学生s1、s2、s3...

原文地址:https://www.cnblogs.com/XuChengNotes/p/11425220.html