面向对象——组合

  

1。组合与重用性

  
  

软件重用的重要方式除了继承外,还有组合
组合:指的是在一个类中的数据属性的值是另外一个类的对象

     
 <代码> # !/usr/bin/env python
  # - * -编码:utf - 8 - *
  #作者:个人简历
  类装备:#武器装备类
  def火(自我):
  打印(“释放火技能”)
  
  类分裂:#英雄撕裂的类,一个英雄需要有装备,因而需要组合装备类
  营=' Noxus '
  def __init__(自我,绰号):
  self.nickname=昵称
  self.equip=装备()#用装备类产生一个装备,赋值给实例的装备属性
  
  r1=撕裂(“锐雯雯)
  r1.equip.fire() #可以使用组合的类产生的对象所持有的方法
  
  E: \ PythonProject \ python测试\ venvP3 \ \ python脚本。exe E:/PythonProject/python测试/BasicGrammer/test.py
  火释放技能
  
  过程完成退出代码0
   
  
 <代码>组合与继承都是有效的利用已有类的资源的重要方式,但二者的概念和使用场景不同
  1 .继承的方式
  通过继承建立了派生类与基类之间的关系,他们是一种“是”的关系,比如人是动物
  当类之间有很多相同功能,提取这些相同的功能做成基类,用继承比较好,例如老师是人,学生是人
  2 .组合的方式
  用组合的方式建立了类与组合的类之间的关系,它是一种“有”的关系,比如教授有生日,教授有学生s1, s2  
  
 <代码>”继承与组合实例”
  类人:
  def __init__(自我,姓名、年龄、性别):
  self.name=名字
  self.age=年龄
  self.sex=性
  
  类课程:
  def __init__(自我、名称、时间、价格):
  self.name=名字
  self.period=时期
  self.price=价格
  def tell_info(自我):
  打印(' & lt; % s % s % s>“% (self.name, self.period self.price))
  
  班主任(人):
  def __init__(自我,姓名、年龄、性别、job_title):
  People.__init__(自我,姓名、年龄、性别)
  self.job_title=job_title
  自我。课程=[]#老师可以讲很多中课
  self.students=[] #老师管理很多个学生
  
  类学生(人):
  def __init__(自我,姓名、年龄、性别):
  People.__init__(自我,姓名、年龄、性别)
  自我。课程=[]#学生上很多课
  
  大多=老师(egon, 18岁的“男性”,“沙河霸道金牌讲师”)
  s1=学生(“牛榴弹”,18岁的“女性”)
  
  python=课程(“python”,“3隆起”,3000.0)
  linux=课程(“python”,“3隆起”,3000.0)
  
  #为老师大多和学生s1添加课程
  egon.course.append (python)
  egon.course.append (linux)
  s1.course.append (python)
  
  #为老师大多添加学生s1
  egon.students.append (s1)
  
  #使用
  在egon.course obj:
  obj.tell_info ()
  
  E: \ PythonProject \ python测试\ venvP3 \ \ python脚本。exe E:/PythonProject/python测试/BasicGrammer/test.py
  & lt; python 3隆起3000.0比;
  & lt; python 3隆起3000.0比;
  
  过程完成退出代码0
   
  
 <代码>”总结:
  当类之间显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好” 

面向对象——组合