Абстрактные классы
Абстрактные классы - это классы, которые предназначены для наследования, но избегают реализации конкретных методов, оставляя только сигнатуры методов, которые должны реализовывать подклассы.
from abc import ABCMeta
class AbstractClass(object):
# атрибут метакласса всегда должен
# быть установлен как переменная класса
__metaclass__ = ABCMeta
# декоратор abstractmethod регистрирует этот метод как undefined
@abstractmethod
def virtual_method_subclasses_must_define(self):
# Можно оставить полностью пустым
# или предоставить базовую реализацию
# Обратите внимание, что обычно пустая интерпретация
# неявно возвращает `None`, но при регистрации
# это поведение больше не применяется.
123456789101112131415Причины использования абстрактных классов
class MontyPython:
def joke(self):
raise NotImplementedError()
def punchline(self):
raise NotImplementedError()
class ArgumentClinic(MontyPython):
def joke(self):
return "Hahahahahah"
12345678910Когда мы создаем объект и называем это два метода, мы получим ошибку (как и ожидалось) с punchline() метод.
Этого можно избежать, используя модуль Abstract Base Class (ABC).
На этот раз, когда мы пытаемся создать экземпляр объекта из неполного класса, мы немедленно получаем TypeError!
Простой пример с множественным наследованием
Last updated
Was this helpful?