day21

类的组合

  • 组合就是一个类的对象具备某一个属性,该属性的值是指向另外一个类的对象
  • 组合的好处:解决类与类之间代码冗余的问题

组合的应用

  • 需求:假如我们需要给学生增添课程属性,但是又不是所有的学生一进学校就有课程属性,课程属性是学生选出来的,也就是说课程需要后期学生们添加进去
  • 实现思路:如果我们直接在学生中添加课程属性,那么学生刚被定义就需要添加课程属性,这就不符合我们的要求,因此我们可以使用组合能让学生未来添加课程属性

多继承

  • 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

原文地址:https://www.cnblogs.com/xwjhyy/p/11654456.html