zoukankan      html  css  js  c++  java
  • python笔记-面向对象-继承-重写

    一、继承

    在实际开发中,我们会遇到很多相同或相类似的对象,它们之间的代码主体相似,我们可以将相似或相同的部分书写成一个基类,其他类就可以继承基类的代码以减少重复代码量

    1.1 单继承

    class Parent:
        name = "Jone"
    
    
    class Son(Parent):
        pass
    
    
    son = Son()
    print(son.name)  # 继承自父类. 输出 Jone
    print(id(Parent.name), id(Son.name))  # 输出  2258624363248 2258624363248
    
    • Parent类: 是被继承的类, 称为父类
    • Son类: 继承Parent的类, 称为子类
    • 继承发生后, 子类会获得父类的所用属性和方法
    • 子类继承父类的属性与父类属性是统一个对象.

    1.2 多继承

    class A:
        pass
    
    
    class B:
        pass
    
    
    class C(A, B):
        pass
    
    print(C.mro())  # 输出 [<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>]
    
    • 当一个类要继承多个类的时候, 每一个类使用逗号(,)进行分隔
    • 会按照书写顺序进行继承
    • ClassName.mro(): 查看继承顺序(C3算法实现), 也是属性和方法的搜索顺序, 先继承先搜索.

    每一个类都会继承一个基类object
    被继承的类还有继承, 也即是多重继承

    class A:
        pass
    
    
    class B:
        pass
    
    
    class C(A):  # C继承A
        pass
    
    
    class D(B):  # D继承B
        pass
    
    
    class E(C, D): # E先继承C(C继承A); 再继承D(D继承B)
        pass
    
    
    print(E.mro())  # [<class '__main__.E'>, <class '__main__.C'>, <class '__main__.A'>, <class '__main__.D'>, <class '__main__.B'>, <class 'object'>]
    

    1.3 菱形继承

    class GrandParent:
        pass
    
    
    class Father(GrandParent):
        pass
    
    
    class Mother(GrandParent):
        pass
    
    
    class Son(Father, Mother):
        pass
    
    
    print(Son.mro())  # [<class '__main__.Son'>, <class '__main__.Father'>, <class '__main__.Mother'>, <class '__main__.GrandParent'>, <class 'object'>]
    

    1.4 继承顺序

    按照父类--父类的父类的顺序依次进行继承

    二、重写

    对于从同一个父类继承而来的代码是一摸一样的,但是对于不同的类有些代码必须进行修改。

    我们在继承父类的属性和方法之后,如果想对继承的属性和方法的内容进行修改,可以将该方法在子类重新写一次,这个就是重写

    class Animal:
    
        def eat(self):
            print("吃东西")
    
        def work(self):
            print("走路")
    
    
    class Cat(Animal):
        def eat(self):  # 重写父类的eat方法
            print("小猫吃东西")  
    
        def work(self):  # 重写父类的work方法
            print("小猫走直线")  
    
    
    cat = Cat()
    cat.eat()
    cat.work()
    
  • 相关阅读:
    hdu1686 最大匹配次数 KMP
    洛谷 P5057 [CQOI2006]简单题(树状数组)
    洛谷 P5020 货币系统
    洛谷 P5019 铺设道路(差分)
    洛谷 P1119 灾后重建(Floyd)
    洛谷 P1082 同余方程(同余&&exgcd)
    洛谷 P2384 最短路
    洛谷 P3371 【模板】单源最短路径(弱化版) && dijkstra模板
    洛谷 P1387 最大正方形
    洛谷 P2866 [USACO06NOV]糟糕的一天Bad Hair Day
  • 原文地址:https://www.cnblogs.com/duyupeng/p/13160899.html
Copyright © 2011-2022 走看看