• Python学习笔记二十二_继承


      上一篇“面向对象”中简单介绍了继承,即一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承。子类可以重写父类方法。继承是为了代码重用。这篇重点写一下重写父类的方法及经典类与新式类在多继承时的区别。

    一、重写父类的方法

    所谓多继承就是一个子类可以继承多个父类。

    重写父类方法的情况有以下两种:
      1、父类的方法一点用没有,直接重新写就好
      2、父类有这个方法,但是它的功能不够完善,想给这个方法在原有基础上再添加一些新功能
        通过 父类名().方法()或者super(子类名,self).方法()来实现

    class Daddy():
        def smile(self):
            print('哈哈')
    
    class Daddy1():
        def smile(self):
            print('嘿嘿')
    
    class Son(Daddy,Daddy1):#子类可以继承多个父类
        def smile(self):#重写父类的方法
            Daddy().smile()#调用了父类,先实例化再调用方法
            super(Son,self).smile()#Super这个关键字自动帮你找到父类,Super括号中写(子类,self)
            # 如果Daddy中有smile就调用Daddy中的smile,如果Daddy中没有smile,就去Daddy1中去找smile
            # 按照父类的顺序去寻找smile方法,直到找到就调用,后面的不再调用
            print('呵呵')
    
    s = Son()
    s.smile()

    二、经典类与新式类的区别

    Python3中,经典类与新式类没有任何的区别,多继承都是广度优先

    Python2中,多继承的时候经典类是深度优先,新式类是广度优先,经典类里面不能用super方法

    #第一个父类B有x这个方法
    class A:
        def x(self):
            print('a')
    class B(A):
        def x(self):
            print('b')
    class C(A):
        def x(self):
            print('a')
    class D(B,C):
        pass
    d = D()
    d.x() #b
    
    #第一个父类B没有x这个方法,经典类深度优先找到A中的x
    class A:
        def x(self):
            print('a')
    class B(A):
        pass
    class C(A):
        def x(self):
            print('a')
    class D(B,C):
        pass
    d = D()
    d.x() #a
    
    #第一个父类B没有x这个方法,新式类广度优先找到C中的x
    class A(object):
        def x(self):
            print('a')
    class B(A):
        pass
    class C(A):
        def x(self):
            print('a')
    class D(B,C):
        pass
    d = D()
    d.x() #c
  • 相关阅读:
    HDU 3586 Information Disturbing (树形DP,二分)
    HDU 4274 Spy's Work (树形DP,模拟)
    HDU 4276 The Ghost Blows Light (树形DP,变形)
    ZOJ 3627 Treasure Hunt II (贪心,模拟)
    ZOJ 3626 Treasure Hunt I (树形DP,常规)
    POJ 2104 K-th Number (区间第k大)
    HDU 4044 GeoDefense (树形DP,混合经典)
    POJ 2486 Apple Tree (树形DP,树形背包)
    HDU 4003 Find Metal Mineral (树形DP,经典)
    TinyMCE
  • 原文地址:https://www.cnblogs.com/dongrui624/p/9111524.html
Copyright © 2020-2023  润新知