经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Ruby » 查看文章
组合
来源:cnblogs  作者:动如雷霆  时间:2018/9/25 20:34:18  对本文有异议

1. 什么是组合

    组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象

2. 为何要用组合

    通过为某一个对象添加属性(属性的值是另外一个类的对象)的方式,可以间接地将两个类关联/整合/组合到一起

    从而减少类与类之间代码冗余

3. 如何用组合

 

组合与继承都是有效地利用已有类的资源的重要方式。但是二者的概念和使用场景皆不同,

 

1.继承的方式

 

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

 

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

 

2.组合的方式

 

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

 

 

  1. class OldboyPeople:
  2. school = 'Oldboy'
  3.  
  4. def __init__(self,name,age,sex,):
  5. self.name = name
  6. self.age = age
  7. self.sex = sex
  8. class OldboyStudent(OldboyPeople):
  9. def __init__(self, name, age, sex,score=0):
  10. OldboyPeople.__init__(self,name,age,sex)
  11. self.score = score
  12. self.courses=[]
  13. def choose_course(self):
  14. print('%s choosing course' % self.name)
  15. def tell_all_course(self):
  16. print(('学生[%s]选修的课程如下' %self.name).center(50,'='))
  17. for obj in self.courses:
  18. obj.tell_info()
  19. print('='*60)
  20. class OldboyTeacher(OldboyPeople):
  21. def __init__(self,name,age,sex,level):
  22. OldboyPeople.__init__(self,name,age,sex)
  23. self.level=level
  24. self.courses=[]
  25. def score(self,stu,num):
  26. stu.score=num
  27. def tell_all_course(self):
  28. print(('老师[%s]教授的课程如下' %self.name).center(50,'*'))
  29. for obj in self.courses:
  30. obj.tell_info()
  31. print('*'*70)
  32. class Course:
  33. def __init__(self,c_name,c_price,c_period):
  34. self.c_name = c_name
  35. self.c_price = c_price
  36. self.c_period = c_period
  37. def tell_info(self):
  38. print('<课程名:%s 价钱:%s 周期:%s>' %(self.c_name,self.c_price,self.c_period))
  39. # 创建课程对象
  40. python=Course('python全栈开发',1900,'5mons')
  41. linux=Course('linux架构师',900,'3mons')
  42. stu1=OldboyStudent('刘二蛋',38,'male')
  43. stu1.courses.append(python)
  44. stu1.courses.append(linux)
  45. # print(stu1.courses)
  46. stu1.tell_all_course()
  47. tea1=OldboyTeacher('egon',18,'male',10)
  48. tea1.courses.append(python)
  49. # print(tea1.courses)
  50. tea1.tell_all_course()
View Code

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号