Ответ
В Python, как в объектно-ориентированном языке, существует несколько типов наследования, которые позволяют создавать иерархии классов и переиспользовать код.
-
Одиночное наследование (Single Inheritance) Класс-потомок наследует атрибуты и методы от одного родительского класса. Это самая простая и распространенная форма наследования.
class Vehicle: def move(self): print("Moving...") class Car(Vehicle): pass my_car = Car() my_car.move() # Вывод: Moving...
-
Множественное наследование (Multiple Inheritance) Класс может наследоваться от нескольких родительских классов, объединяя их функциональность. Порядок родительских классов в определении важен, так как он влияет на порядок разрешения методов (MRO).
class Engine: def start(self): print("Engine started") class Radio: def play_music(self): print("Playing music") class Car(Engine, Radio): pass my_car = Car() my_car.start() # Вывод: Engine started my_car.play_music() # Вывод: Playing music
-
Многоуровневое наследование (Multilevel Inheritance) Создается цепочка наследования: класс
C
наследуется отB
, который, в свою очередь, наследуется отA
.class A: def method_a(self): print("Method A") class B(A): def method_b(self): print("Method B") class C(B): pass instance_c = C() instance_c.method_a() # Доступен из класса A instance_c.method_b() # Доступен из класса B
-
Иерархическое наследование (Hierarchical Inheritance) Несколько дочерних классов наследуются от одного родительского класса.
class Animal: def speak(self): pass class Dog(Animal): def speak(self): return "Woof!" class Cat(Animal): def speak(self): return "Meow!"
Порядок разрешения методов (MRO)
При наследовании, особенно множественном, Python использует алгоритм C3-линеаризации для определения порядка, в котором будут искаться методы в иерархии классов. Этот порядок можно посмотреть с помощью атрибута __mro__
.
print(Car.__mro__)
# (<class '__main__.Car'>, <class '__main__.Engine'>, <class '__main__.Radio'>, <class 'object'>)