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()
原文地址:https://www.cnblogs.com/duyupeng/p/13160899.html