目录

* 一、什么是组合 <https://www.cnblogs.com/nickchen121/p/10988446.html#一什么是组合>
* 二、为什么用组合 <https://www.cnblogs.com/nickchen121/p/10988446.html#二为什么用组合>
* 三、如何用组合 <https://www.cnblogs.com/nickchen121/p/10988446.html#三如何用组合>
一、什么是组合

* 组合就是一个类的对象具备某一个属性,该属性的值是指向另外外一个类的对象


二、为什么用组合

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

*
首先我们先写一个简单版的选课系统
class OldboyPeople: school = 'oldboy' def __init__(self, name, age, sex):
self.name = name self.age = age self.sex = sex class
OldboyStudent(OldboyPeople): def __init__(self, name, age, sex, stu_id):
OldboyPeople.__init__(self, name, age, sex) self.stu_id = stu_id def
choose_course(self): print('%s is choosing course' % self.name) class
OldboyTeacher(OldboyPeople): def __init__(self, name, age, sex, level):
OldboyPeople.__init__(self, name, age, sex) self.level = level def score(self,
stu, num): stu.score = num print('老师[%s]为学生[%s]打分[%s]' % (self.name, stu.name,
num)) stu1 = OldboyStudent('tank', 19, 'male', 1) tea1 = OldboyTeacher('nick',
18, 'male', 10) stu1.choose_course() tank is choosing course tea1.score(stu1,
100) 老师[nick]为学生[tank]打分[100] print(stu1.__dict__) {'name': 'tank', 'age': 19,
'sex': 'male', 'stu_id': 1, 'score': 100}
* 如上设计了一个选课系统,但是这个选课系统在未来一定是要修改、扩展的,因此我们需要修改上述的代码
三、如何用组合

*
需求:假如我们需要给学生增添课程属性,但是又不是所有的老男孩学生一进学校就有课程属性,课程属性是学生来老男孩后选出来的,也就是说课程需要后期学生们添加进去的

*
实现思路:如果我们直接在学生中添加课程属性,那么学生刚被定义就需要添加课程属性,这就不符合我们的要求,因此我们可以使用组合能让学生未来添加课程属性


class Course: def __init__(self, name, period, price): self.name = name
self.period = period self.price = price def tell_info(self): msg = """ 课程名:%s
课程周期:%s 课程价钱:%s """ % (self.name, self.period, self.price) print(msg) class
OldboyPeople: school = 'oldboy' def __init__(self, name, age, sex): self.name =
name self.age = age self.sex = sex class OldboyStudent(OldboyPeople): def
__init__(self, name, age, sex, stu_id): OldboyPeople.__init__(self, name, age,
sex) self.stu_id = stu_id def choose_course(self): print('%s is choosing
course' % self.name) class OldboyTeacher(OldboyPeople): def __init__(self,
name, age, sex, level): OldboyPeople.__init__(self, name, age, sex) self.level
= level def score(self, stu, num): stu.score = num print('老师[%s]为学生[%s]打分[%s]'
% (self.name, stu.name, num)) # 创造课程 python = Course('python全栈开发', '5mons',
3000) python.tell_info() 课程名:python全栈开发 课程周期:5mons 课程价钱:3000 linux =
Course('linux运维', '5mons', 800) linux.tell_info() 课程名:linux运维 课程周期:5mons
课程价钱:800 # 创造学生与老师 stu1 = OldboyStudent('tank', 19, 'male', 1) tea1 =
OldboyTeacher('nick', 18, 'male', 10)
* 组合 # 将学生、老师与课程对象关联/组合 stu1.course = python tea1.course = linux
stu1.course.tell_info() 课程名:python全栈开发 课程周期:5mons 课程价钱:3000
tea1.course.tell_info() 课程名:linux运维 课程周期:5mons 课程价钱:800
*
组合可以理解成多个人去造一个机器人,有的人造头、有的人造脚、有的人造手、有的人造躯干,大家都完工后,造躯干的人把头、脚、手拼接到自己的躯干上,因此一个机器人便造出来了

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信