类的继承

类的继承

''''''


# 继承的语法

# 先定义一个父类
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中出现  
当出现了菱形继承时,新式类,先深度,当遇到了共同父类时就广度 
​新式类,就是深度优先

'''
原文地址:https://www.cnblogs.com/asdaa/p/11247501.html