- Виртуальный метод – это метод базового класса, который можно переопределить в классе-наследнике. Имеет реализацию по умолчанию.
- Абстрактный метод – это метод, который обязательно нужно переопределить в классе-наследнике. Не имеет реализации в базовом классе.
Характеристика | Виртуальный метод | Абстрактный метод |
|---|---|---|
Объявление | def method (self): | @abstractmethod |
Реализация в базовом классе | Есть (по умолчанию) | Нет (обязательная для потомков) |
Назначение | Предоставить изменяемое поведение «по умолчанию» | Задать обязательный интерфейс (контракт) |
Класс | Может быть обычным классом | Делает класс абстрактным |
Создание объектов | Можно создавать объекты базового класса | Нельзя создавать объекты абстрактного класса |
Пример | class Animal: def speak (self): print ("Животное издаёт звук") class Dog (Animal): def speak (self): print ("Гав") | from abc import ABC, abstractmethod class Animal (ABC): @abstractmethod def speak (self): pass |