python基础学习之面向对象之三
现在学习完开胃小菜 我们来学习重头戏
面向对象的三大特征
封装 继承 多态
封装
是指在面向对象编程的思想中,对代码进行高度的封装,封装又叫包装.封装在编程中的核心作用:整体化代码,便于携带,提高数据或算法的安全性.
面向对象的编程思想核心:高类聚,低耦合–程序的设计模式的范畴.
继承
在程序中继承是指描述的是多个类之间的一个所属关系
例如一个类A里面的所有的属性和方法可以复用,这个时候可以通过继承的方式,传递到类B里面 这里A类称之为父类(基类) B类称之为子类(派生类)
在Python中子类(派生类)会继承父类(基类),那么子类就及继承了父类中的属性和方法,简化了子类的设计问题,便于后期的维护和升级
继承的作用
继承能够极大程度的减少代码中的冗余程度
继承便于系统的后期维护工作
单继承
概念:一个类只继承了一个父类
如果子类继承了父类,子类就继承了父类的属性和方法
多继承
概念:
一个类继承了多个父类
子类继承了多个父类,则子类就会继承父类的所有的不同名的方法.
如果多个父类的方法名相同(init,kongfu)
子类只会继承第一个父类的方法
通过一个类创建对象成功后,必须要执行一次init方法(可能是自己类中的,或者是父类中的)
为神魔子类会继承第一个父类的属性?
如果子类中没有init这个方法,那么所有的父类中的init方法只有第一个父类的执行了,如果子类中也有init方法,那么所有的父类中的init方法都不会执行.
结论
1.如果多个父类的方法名不同,子类会全部继承
2.如果多个父类的方法名相同,子类会继承第一个父类的方法
3.如何决定子类继承哪个父类的属性,看子类到底继承了哪个父类的__init__方法
4.如果子类也有父类的同名方法,那么子类就会选择自己的这个方法
5.如果子类中也有__init__方法,那么所有的父类的属性都不会被继承
6.通过一个类创建对象,必须要执行一次init方法找init方法的顺序要遵循类的继承链
7.,如何查看一个类的继承链 类名.mro
子类重写父类的同名方法和属性
子类继承了父类
1.子类实现了父类的同名方法,为了做自己特有的事情可以进行重写
2.如果通过子类创建一个对象,如果调用方法,它遵循的是类的继承连
重写
是指在子类中重新去写父类中已经拥有的方法,并且在子类中保持这个方法的名字不变,只有方法体发生改变,那么调用子类对象的这个方法以后都是子类中所写的子类调用父类的同名
子类调用父类的同名属性和方法
1.子类继承了父类,父类不能满足子类的需求,子类重写父类的同名方法
2. 但是子类还想在其类内部使用父类的同名方法
方式:
父类名.父类的同名方法(self)
2.
使用super
super函数是用来获取指定的子类在继承链中的后一个类给前子类的self
super (子类名,self).父类同名方法
一般情况下获取当前子类的直接父类的同名方法可以省略括号中的参数
super().父类同名方法
多层继承
和多继承其实是一个原理,包括调用父类中的同名方法,包括super函数的使用都是一样的原理