• python(继承顺序)


    1.python可以继承多个类。

    2.python如果继承多个类,其寻找方法有两种:深度优先和广度优先。

    例:F继承D和F,D继承B,F继承C,B和C继承A。

    https://www.cnblogs.com/linhaifeng/articles/7340153.html#_label2

    查找的顺序是F,D,B,E,C,A

    # -*- coding: utf-8 -*-
    class A:
        def test(self):
            print('A')
    
    class B(A):
        def test(self):
            print('B')
    
    class C(A):
        def test(self):
            print('C')
    
    
    class D(B):
        def test(self):
            print('D')
    
    
    class E(C):
        def test(self):
            print('E')
    
    
    class F(D,E):
        def test(self):
            print('F')
    f1=F()
    f1.test()

    python到底是如何实现继承的,对于你定义的每一个类,python会计算出一个方法解析顺序(MRO)列表,这个MRO列表就是一个简单的所有基类的线性顺序列表

    为了实现继承,python会在MRO列表上从左到右开始查找基类,直到找到第一个匹配这个属性的类为止。
    而这个MRO列表的构造是通过一个C3线性化算法来实现的。我们不去深究这个算法的数学原理,它实际上就是合并所有父类的MRO列表并遵循如下三条准则:
    1.子类会先于父类被检查
    2.多个父类会根据它们在列表中的顺序被检查
    3.如果对下一个类存在两个合法的选择,选择第一个父类

    基类没有继承的就是经典类,基类有继承的就是新式类。

    子类中调用父类的方法

    方法一:指名道姓,即父类名.父类方法()

    # -*- coding: utf-8 -*-
    class Vehicle: #定义交通工具类
         Country='China'
         def __init__(self,name,speed,load,power):
             self.name=name
             self.speed=speed
             self.load=load
             self.power=power
    
         def run(self):
             print('开动啦...')
    
    class Subway(Vehicle): #地铁
        def __init__(self,name,speed,load,power,line):
            Vehicle.__init__(self,name,speed,load,power)    #子类在父类的基础上加东西
            self.line=line
    
        def run(self):
            print('地铁%s号线欢迎您' %self.line)
            Vehicle.run(self)
    
    line13=Subway('中国地铁','180m/s','1000人/箱','',13)
    line13.run()

    (推荐)方法二:super()<------不用写父类的名字了

     1 # -*- coding: utf-8 -*-
     2 class Vehicle:  # 定义交通工具类
     3     Country = 'China'
     4 
     5     def __init__(self, name, speed, load, power):
     6         self.name = name
     7         self.speed = speed
     8         self.load = load
     9         self.power = power
    10 
    11     def run(self):
    12         print('开动啦...')
    13 
    14 
    15 class Subway(Vehicle):  # 地铁
    16     def __init__(self, name, speed, load, power, line):
    17         # super(Subway,self) 就相当于实例本身 在python3中super()等同于super(Subway,self)
    18         super().__init__(name, speed, load, power)
    19         self.line = line
    20 
    21     def run(self):
    22         print('地铁%s号线欢迎您' % self.line)
    23         super(Subway, self).run()
    24 
    25 
    26 class Mobike(Vehicle):  # 摩拜单车
    27     pass
    28 
    29 
    30 line13 = Subway('中国地铁', '180m/s', '1000人/箱', '', 13)
    31 line13.run()
  • 相关阅读:
    《编写高质量代码》读书笔记一
    [转] Markdown
    皓首穷经还是及时行乐!
    有用的iOS网站地址
    [股票] 入市
    https原理 就是两次http
    数据预处理
    重新建立程序员的应对方式
    ROC曲线手画
    机器学习的总结
  • 原文地址:https://www.cnblogs.com/2018-1025/p/12158769.html
Copyright © 2020-2023  润新知