Подкласс, который подклассы ABC и OrderedDict не действует как истинный абстрактный класс:
>>> from abc import ABC, abstractmethod
>>> from collections import OrderedDict
>>> class AbstractOrderedDict(OrderedDict, ABC):
... @abstractmethod
... def abstract_method(self):
... pass
...
>>> AbstractOrderedDict()
AbstractOrderedDict()
Можно ожидать, что создание экземпляра AbstractOrderedDict завершится ошибкой, верно?
Дальнейшие эксперименты показали, чтопри создании подклассов object
и ABC
при создании экземпляра возникает ошибка TypeError, как и ожидалось (очевидно), но при создании подкласса любого другого базового класса (dict, int, list и т. д.) нет (ведет себя так, как указано выше).
Вопросы:
- Почему он так себя ведет?
- Является ли теоретически плохой идеей сделать абстрактный подкласс OrderedDict (или других)?
- Почему?
- Альтернативы?