类的组合
一、什么是组合
- 组合就是一个类的对象具备某一个属性,该属性的值是另一个类的对象
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...