Типы наследования в объектно-ориентированном программировании (ООП) с примерами кода

В объектно-ориентированном программировании (ООП) наследование — это механизм, который позволяет одному классу наследовать свойства и поведение от другого класса. Наследование способствует повторному использованию кода и помогает создать иерархическую структуру классов. В ООП существует несколько типов наследования, например:

  1. Единственное наследование. При одиночном наследовании класс наследует свойства и поведение только от одного родительского класса. Он формирует отношения родитель-потомок один к одному.
class Parent:
    def __init__(self):
        self.parent_property = "I am the parent"
    def parent_method(self):
        print("This is a parent method")

class Child(Parent):
    def __init__(self):
        super().__init__()
        self.child_property = "I am the child"
    def child_method(self):
        print("This is a child method")

# Creating objects
obj = Child()
# Accessing properties and methods
print(obj.parent_property)  # Output: I am the parent
obj.parent_method()  # Output: This is a parent method
print(obj.child_property)  # Output: I am the child
obj.child_method()  # Output: This is a child method
  1. Множественное наследование. Множественное наследование позволяет классу наследовать свойства и поведение от нескольких родительских классов. Он формирует множественные отношения родитель-потомок.
class Parent1:
    def parent1_method(self):
        print("This is a parent1 method")

class Parent2:
    def parent2_method(self):
        print("This is a parent2 method")

class Child(Parent1, Parent2):
    def child_method(self):
        print("This is a child method")

# Creating object
obj = Child()
# Accessing methods
obj.parent1_method()  # Output: This is a parent1 method
obj.parent2_method()  # Output: This is a parent2 method
obj.child_method()  # Output: This is a child method
  1. Многоуровневое наследование. Многоуровневое наследование происходит, когда производный класс наследуется от другого производного класса. Он формирует цепочку отношений родитель-потомок.
class Grandparent:
    def grandparent_method(self):
        print("This is a grandparent method")

class Parent(Grandparent):
    def parent_method(self):
        print("This is a parent method")

class Child(Parent):
    def child_method(self):
        print("This is a child method")

# Creating object
obj = Child()
# Accessing methods
obj.grandparent_method()  # Output: This is a grandparent method
obj.parent_method()  # Output: This is a parent method
obj.child_method()  # Output: This is a child method
  1. Иерархическое наследование. Иерархическое наследование – это тип наследования, при котором несколько производных классов наследуются от одного базового или родительского класса.
class Parent:
    def parent_method(self):
        print("This is a parent method")

class Child1(Parent):
    def child1_method(self):
        print("This is child1 method")

class Child2(Parent):
    def child2_method(self):
        print("This is child2 method")

# Creating objects
obj1 = Child1()
obj2 = Child2()
# Accessing methods
obj1.parent_method()  # Output: This is a parent method
obj1.child1_method()  # Output: This is a child1 method
obj2.parent_method()  # Output: This is a parent method
obj2.child2_method()  # Output: This is a child2 method
  1. Гибридное наследование. Гибридное наследование представляет собой комбинацию нескольких типов наследования. Это может быть комбинация любых двух или более типов наследования.
class Parent1:
    def parent1_method(self):
        print("This is a parent1 method")

class Parent2:
    def parent2_method(self):
        print("This is a parent2 method")

class Child1(Parent1):
    def child1_method(self):
        print("This is child1 method")

class Child2(Parent1, Parent2):
    def child2_method(self):
        print("This is child2 method")

# Creating objects
obj1 = Child1()
obj2 = Child2()
# Accessing methods
obj1.parent1_method()  # Output: This is a parent1 method
obj1.child1_method()  # Output: This is a child1 method
obj2.parent1_method()  # Output: This is a parent1 method
obj2.parent2_method()  # Output: This is a parent2 method
obj2.child2_method()  # Output: This is a child2 method