组合
【一】什么是组合
- 在一个类中以另外一个类的对象作为数据属性,称为类的组合。
【二】组合的使用
- 组合与继承都是用来解决代码的重用性问题。
- 不同的是:
- 继承是一种“是”的关系,比如老师是人、学生是人,当类之间有很多相同的之处,应该使用继承;
- 而组合则是一种“有”的关系,比如老师有生日,老师有多门课程,当类之间有显著不同,并且较小的类是较大的类所需要的组件时,应该使用组合
- 目的:解决代码的重用性
举例:
class Course:
def __init__(self,name,perid,price):
self.name = name
self.period = perid
self.price = price
def tell_info(self):
print(f"{self.name}课程周期为{self.period}个月,价格为{self.price}")
class Date:
def __init__(self,year,month,day):
self.year = year
self.month = month
self.day = day
def tell_info(self):
print(f"生日是{self.year}年{self.month}月{self.day}日")
class People:
school="希望小学"
def __init__(self,name,sex,age):
self.name=name
self.sex=sex
self.age=age
class Teacher(People):
def __init__(self,name,sex,age,title,year,month,day):
self.title=title
super().__init__(name,sex,age)
self.birthday=Date(year,month,day)
self.courses=[]
def tell_info(self):
print(f"姓名:{self.name},性别:{self.sex},年龄:{self.age},职称:{self.title}")
python = Course("python",12,19800)
Java=Course("Java",24,29800)
teacher1=Teacher("张三","男",38,"高级讲师",1985,10,10)
teacher1.courses.append(python)
teacher1.courses.append(Java)
for i in teacher1.courses:
i.tell_info()
【三】组合和继承的区别
-
组合和继承都是有效地利用已有类的资源的重要方式。但是二者的概念和使用场景皆不同。
-
继承主要是用来提取所有子类共有的功能的,总结成一个父类通过继承建立了派生类与基类之间的关系,它是一种'是'的关系,比如白马是马,人是动物。当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好,比如老师是人,学生是人
-
组合就相当于将不同的数据类型,包括八大基本数据类型,包括我们的对象,包括我的类总结到一起,可以在一个类的对象里面调用其他类的对象和方法用组合的方式建立了类与组合的类之间的关系。