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()

posted on 2020-01-07 22:41  hcy12  阅读(668)  评论(0编辑  收藏  举报

导航