zoukankan      html  css  js  c++  java
  • 练习四十七:面向对象

    阅读下面代码,分析它输出的结果

    本例重点:super()内置函数

    super() 函数是用于调用父类(超类)的一个方法。

    super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。

    MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。

      1 class A(object):
      2     def go(self):
      3         print('go to A')
      4     def stop(self):
      5         print('stop A')
      6     def pause(self):
      7         print('pause A')
      8 class B(A): #B继承A
      9     def go(self):
     10         super(B,self).go()#super(B,self) 首先找到 B 的父类(就是类 A),然后把类B的对象 B 转换为类 A 的对象
     11         print('go B')
     12 class C(A):
     13     def go(self):
     14         super(C,self).go()
     15         print('go C')
     16     def stop(self): 
     17         super(C,self).stop()
     18         print('stop C')
     19 
     20 class D(B,C):  #相当于D继承了A,B,C,原因B,C继承了A
     21     def go(self):
     22         super(D,self).go()
     23         print('go D')
     24     def stop(self):
     25         super(D,self).stop()
     26         print('stop D')
     27     def pause(self): #父类方法重写
     28         print('wait D')
     29 class E(B,C):
     30     pass
     31 a = A()
     32 b = B()
     33 c = C()
     34 d = D()
     35 e = E()
     36 
     37 a.go() #仅打印:go to A
     38 b.go() #打印父类和子类:go to A  go B
     39 c.go() #打印父类和子类:go to A  go C
     40 d.go() #打印父类和子类:go to A  go Bgo Cgo D
     41 e.go() #打印父类和子类:go to A  go Bgo C
     42 print('-----------------------------------')
     43 a.stop() #仅打印:stop A
     44 b.stop() #仅打印:stop A
     45 c.stop() #打印父类和子类;stop A|stop C
     46 d.stop() #打印父类和子类;stop A|stop C|stop D
     47 e.stop() #打印父类和子类;stop A|stop C
     48 print('-----------------------------------')
     49 a.pause() #仅打印:pause A
     50 b.pause() #仅打印:pause A
     51 c.pause() #仅打印:pause A
     52 d.pause() #仅打印:wait D
     53 e.pause() #仅打印:pause A

    执行结果:

    go to A
    go to A
    go B
    go to A
    go C
    go to A
    go C
    go B
    go D
    go to A
    go C
    go B
    -----------------------------------
    stop A
    stop A
    stop A
    stop C
    stop A
    stop C
    stop D
    stop A
    stop C
    -----------------------------------
    pause A
    pause A
    pause A
    wait D
    pause A
    
  • 相关阅读:
    HTML 表单常用的代码元素
    HTML 基础及基本标签 (暂时无图)
    C#中的集合
    SQL中的视图,事务
    SQL基本编程,分支语句,循环语句,存储过程,触发器
    GO.语言基础
    问题.beego路由设置及请求参数传递
    GO.数据库接口
    Java NIO 上
    maven构建springmvc过程中遇到的一些问题
  • 原文地址:https://www.cnblogs.com/pinpin/p/10140517.html
Copyright © 2011-2022 走看看