Пропустить до содержимого

Как использовать Python mixin в своих программах?

[

Наследование и композиция: руководство по ООП в Python

by Isaac Rodriguez Jan 15, 2024 27 комментариев best-practices intermediate python

Что такое наследование и композиция?

Наследование и композиция являются двумя основными концепциями в объектно-ориентированном программировании, которые моделируют отношение между двумя классами. Они являются строительными блоками объектно-ориентированного дизайна и помогают программистам писать повторно используемый код.

По окончании этого руководства вы узнаете, как:

  • Использовать наследование в Python
  • Создавать иерархии классов с использованием наследования
  • Использовать множественное наследование в Python и понимать его недостатки
  • Использовать композицию для создания сложных объектов
  • Переиспользовать существующий код с помощью композиции
  • Изменять поведение приложения во время выполнения с помощью композиции

Что такое наследование?

Наследование моделирует то, что называется «является» отношением. Это означает, что когда у вас есть класс Derived, который наследуется от класса Base, вы создаете отношение, где Derived является специализированной версией Base.

Наследование представлено с использованием Unified Modeling Language или UML следующим образом:

Base
|
|
Derived

В этом примере класс Derived наследует свойства и методы класса Base. Подкласс Derived может расширять функциональность базового класса, добавляя новые свойства и методы.

Чтобы создать отношение наследования между классами, вы должны указать имя базового класса в определении подкласса с использованием ключевого слова class:

class Base:
pass
class Derived(Base):
pass

В этом примере класс Derived наследует функциональность класса Base. Теперь, объекты класса Derived имеют все свойства и методы класса Base.

Переопределение методов

Подклассы могут также переопределять методы базового класса, чтобы изменить или дополнить их функциональность. Это позволяет адаптировать поведение базового класса в подклассе.

class Base:
def greet(self):
print("Hello, I am a Base object.")
class Derived(Base):
def greet(self):
print("Hello, I am a Derived object.")

В этом примере класс Derived переопределяет метод greet() базового класса Base. Теперь, при вызове метода greet() на объекте класса Derived, будет выводиться сообщение от подкласса.

obj = Derived()
obj.greet() # Выведет "Hello, I am a Derived object."

Вызов методов базового класса

В подклассе можно вызвать методы базового класса, используя функцию super(). Это полезно, когда вам необходимо выполнить метод базового класса, а затем добавить к нему дополнительную логику.

class Base:
def greet(self):
print("Hello, I am a Base object.")
class Derived(Base):
def greet(self):
super().greet() # Вызов метода базового класса
print("Hello from the Derived class.")

В этом примере подкласс Derived вызывает метод greet() базового класса Base с помощью super(), а затем добавляет свою собственную логику.