python的面向对象三大特性之多态,Mixin设计模式,补充知识多继承的MRO

补充继承里面的知识,MRO

  • MRO就是多继承中,用于保存继承顺序的一个列表
  • python本身采用c3算法来多多继承的菱形继承进行计算的结果
  • MRO列表的计算原则:
    1.子类永远在父类前面
    2.如果多个父类,则根据继承语法中括号内类的书写顺序存放
    3.如果多个类继承勒同一个父类,孙子类中只会选取继承语法括号中第一个父类的父类

多态

-多态是同一事物多种形态,文件也有多种形态:文件,文本文件,可执行文件
-多态不是语法,是一种设计思想
-多态:同一事物的多种形态

多态性

什么是多态性呢?这里注意了,多态性和多态是两个不同的概念。
多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。
简单说就是:
‘同一种调用方式,出现不同的执行效果’


#多态性依赖于继承
##多态性:定义统一的接口
def func(obj):	
	print(obj.__len__())
	
func('hello')	
5

func([1,2,3,4])
4

func((1,2,3,4))
4
#都是调用同一个函数,执行的结果却不一样
#问题就在于函数的参数‘obj’上面,这个参数是多态性的关键,他是多态性的具体表现形式

总的来说,在python中,多态性是一个接口(函数func),多种实现(如 func(‘hello’))

多态性的好处

上面的例子看到了,我们并没有怎加函数中的代码,但是在下面通过多态性实现了多种功能,好处是

  1. 增加了程序的灵活性
    以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,
  2. 增加了程序的可扩展性
    通过继承父类创建一个新的类,在后面的使用中,使用者无需更改自己的代码,而且调用方法也没有多少变化

Mixin设计模式

  • Mixin设计主要采用多继承的方式对类的功能进行扩展
  • 使用Mixin实现多继承的时候应该需要小心点
    -首先他只能表示某一个单一的功能,而不是整个类
    -如果需要实现多个功能,则需要多写点Mixin
    -Mixin不能依赖于子类的实现
    -即使子类不继承Mixin,也能照样工作,只不过缺少了一些功能
  • 优点
    -使用Mixin可以在不对类进行任何修改的情况下,扩充功能
    -可以方便的组织和维护不同功能组件的划分
    -可以根据需要任意调整功能类的组合
    -可以少创建点不必要的类,以免导致类的继承混乱



在python中有很多适用于面向对象的内置函数,这些函数都是很有用的,可以去了解一下!

你可能感兴趣的:(多态,面向对象编程,python)