Регистрация не дает вам «отсутствующих методов», реализованных поверх тех, которые вы определили: на самом деле, регистрация неинвазивна относительно типа, который вы регистрируете - ничего не добавляется кэто, ничего не удаляется, ничто не изменяется.Он только влияет на isinstance
и issubclass
проверки: ни больше, ни меньше.
Создание подклассов ABC может и дает вам множество методов, реализованных "бесплатно" ABC наЛучшие из тех, что вы должны определить сами.
Семантика операции, которая полностью неинвазивна, как регистрация, по сравнению с операцией, которая предназначена для обогащения класса, напримерподклассы, очевидно, не могут быть идентичными;таким образом, ваше понимание «всей точки азбуки» несовершенно - азбука имеет две точки, одна получена путем подкласса («инвазивный»), одна - путем регистрации (неинвазивный).
Обратите внимание, что вы всегда можете многократно наследовать, если у вас уже есть класс, подобный вашему исходному Mapping
: class GoogMapping(Mapping, collections.Mapping): ...
даст вам те же результаты, что и наследование Mapping
напрямую от collections.Mapping
- новый тип все вспомогательные методы, добавленные collections.Mapping
.