继承: 基于通用类创造出专用类

我们可以继承已有类的属性,生成新的类。

011_继承对比图示.png

单继承

  1. ┌───────────────┐
  2. object
  3. └───────────────┘
  4. ┌────────────┴────────────┐
  5. ┌─────────────┐ ┌─────────────┐
  6. Animal Plant
  7. └─────────────┘ └─────────────┘
  8. ┌─────┴──────┐ ┌─────┴──────┐
  9. ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
  10. Dog Cat Tree Flower
  11. └─────────┘ └─────────┘ └─────────┘ └─────────┘
  1. class Animal(object):
  2. def run(self):
  3. print('Animal is runnung')
  4. class Dog(Animal):
  5. def run(self):
  6. print("Dog is running...")
  7. def eat(self):
  8. print("Eating meat...")
  9. class Cat(Animal):
  10. pass
  11. dog=Dog()
  12. dog.run()
  13. dog.eat()

MRO

在继承多个类时,可能会遇到不同类中有相同方法的情况,这时Pythin会使用MRO顺序来搜索不同类之间的方法,大致为深度优先、从左至右,并确保每个基类至多访问一次。

  1. class A():
  2. pass
  3. class B():
  4. pass
  5. class C(A,B):
  6. pass
  7. >>> C.__mro__
  8. (__main__.C, __main__.A, __main__.B, object)

https://docs.python.org/zh-cn/3/tutorial/classes.html#multiple-inheritance