类的继承
'''''' # 继承的语法 # 先定义一个父类 class Person: msg = 'hello world' def fn(self): print('xxx') # 定义一个子类 class Student(Person): pass # 子类会得到父类中的属性和方法 ''' 继承与抽象 抽象就是将多个类中,抽出相同的属性和方法,建立一个父类 正确使用继承: 1.先抽象再继承 2.继承现在已存在的类,拓展或是修改原始的功能 属性的查找顺序 会先去对象中找,如果对象中没有去类中找,类里面没有再去父类中找 父类中没有再去父类的父类中找,以此类推最后回去object中寻找,再找不到直接报错 继承的原理(mro列表) 类名.mro() ''' ''' 派生与覆盖 当子类中出现了与父类不相同的方法和属性时,就称这类子类为派生类 一般性子类都会与父类不同,所以通常说派生类就是子类 覆盖 overrides 当子类出现了与父类名称相同的属性和方法时 就称之为覆盖 ''' ''' 子类访问父类中的属性和方法 方式一: super(当前类名,self).你要调用父类中的属性或方法 python2中必须这样进行调用 方式二: super().你要调用父类中的属性或方法 python3中新的语法 方式三: 类名.你要调用父类中的属性和方法 使用这种方法时根本就不需要继承了 强调:当你继承一个父类时,使用init将父类覆盖时, 必须在初始化第一行调用父类init方法进行传值,并出入父类所需的参数 ''' ''' 组合 在讲组合之前需要弄清楚继承与组合的区别: 继承:描述两个对象之间的关系,什么是什么的关系 组合:也是一种关系,描述两个对象之间 是什么有什么的关系 组合是将一个对象当做另一个对象的属性传入 组合的目的: 为了重用现有的代码 什么时候使用继承:分析两个类的关系,到底是不是:什么是什么的关系 什么时候使用组合:如果两个类之间 没有太大的关系,完全不属于同类 另外组合相比继承,耦合度更低了 ''' ''' 菱形继承 在python3中表面上是广度寻找,广度没找到再去深度寻找, 本质上是,先进行深度寻找,找到共同的父类,再进行广度寻找 在python2中,直接进行深度寻找,再去广度寻找, ##### 补充:新式类与经典类 python3中任何类都是直接或间接继承了Object 新式类,任何显式或隐式地继承自object的类就称之为新式类, python3中全都是新式类 经典类,既不是Object的子类 ,仅在python2中出现 当出现了菱形继承时,新式类,先深度,当遇到了共同父类时就广度 新式类,就是深度优先 '''