Питон - статьи

         

Конфликты метаклассов


Стоит вам всерьез поработать с метаклассами, и вы хотя бы раз столкнетесь с конфликтом метаклассов/метатипов. Рассмотрим класс A с метаклассом M_A и класс B с метаклассом M_B; предположим, что мы производим C от A и B. Возникает вопрос: что является метаклассом C? M_A или M_B?

Правильный ответ - M_C, где M_C - это метакласс, который наследуется от M_A и M_B, как показано на следующей диаграмме (см. ниже в разделе Ресурсы

ссылку на книгу "Использование метаклассов" (Putting metaclasses to work)):





Рис. 4. Предотвращение конфликта метаклассов



Однако, Python автоматически не создает (пока) M_C. Вместо этого он возбуждает исключение TypeError, предупреждая программиста о конфликте:





Содержание раздела