类的组合
- 组合就是一个类的对象具备某一个属性,该属性的值是指向另外一个类的对象
- 组合的好处:解决类与类之间代码冗余的问题
组合的应用
- 需求:假如我们需要给学生增添课程属性,但是又不是所有的学生一进学校就有课程属性,课程属性是学生选出来的,也就是说课程需要后期学生们添加进去
- 实现思路:如果我们直接在学生中添加课程属性,那么学生刚被定义就需要添加课程属性,这就不符合我们的要求,因此我们可以使用组合能让学生未来添加课程属性
多继承
- OCP原则:多继承,少修改;继承的用途:增强基类,实现多
1、多态
- 在面向对象中,父类,子类通过继承联系在一起,如果可以通过一套方法,就可以实现不同的表现,就是多态
- 一个类继承自多个类就是多继承,它将具有多个类的特征
2、多继承弊端
- 多继承很好的模拟了世界,因为事物很少是单一继承,但是舍弃简单,必然引入复杂性带来冲突
- 如同一个孩纸继承了来自父母双方的特征
- 多继承的实现会导致编译器设计的复杂度增加,所以现在很多语言也舍弃了类的多继承
3、python多继承实现
- 多继承带来路径选择问题,究竟继承哪个父类的特征
- python使用MRO(method resolution order)解决基类搜索顺序问题
4、多继承的缺点
- 当类很多,继承复杂的情况下,继承路径太多,很难说清楚什么样的继承路径
- python语法是允许多继承,但是python代码是解释执行,只有执行到的时候才发现错误
5、用装饰器增强
- 用装饰器增强一个类,把功能给类附加上去,哪个类需要,就装饰它
- 优点:简单方便,在需要的地方动态增加,直接使用装饰器
类的封装
- 广义上面向对象的封装:代码的保护,面向对象的思想本身就是一种封装
- 只让自己的对象能调用自己类中的方法
- 狭义上的封装-面向对象三大特性之一(私有变量,用公有的方法封装私有属性,方法叫封装)
- 把属性和方法都藏起来,不让你看见
- 类的特性
- 所有的私有,都是在变量左边加双下划线
- 所有的私有,都不能在类的外部使用
- 对象的私有属性
- 类的私有方法
- 类中私有的静态属性
property特性
一 、什么是特性property
property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值。
注意:此时的特性arear和perimeter不能被赋值
二、为什么要用property
将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉自己的name是执行了一个函数然后计算出来的,这种特性的使用方式遵循了统一访问的原则。
被property装饰的属性会优先于对象的属性被使用
而被propery装饰的属性,如sex,分成三种:
1.property
2.sex.setter
3.sex.deleter