Недавно я обнаружил метаклассы в python.
В основном метаклассом в python является класс, который создает класс. Существует много полезных причин, по которым вы хотели бы это сделать - например, любая инициализация класса. Регистрация классов на фабриках, комплексная проверка атрибутов, изменение работы наследования и т.д. Все это становится не только возможным, но и простым.
Но в python метаклассы также являются простыми классами. Итак, я начал задаваться вопросом, может ли абстракция с пользой пойти выше, и мне кажется, что она может и что:
- метакласс соответствует или реализует роль в шаблоне (как в языках шаблонов GOF).
- Мета-метакласс - это сам шаблон (если мы разрешаем ему создавать кортежи классов, представляющих абстрактные роли, а не только один класс)
- мета-мета-метакласс - это шаблон factory, который соответствует группам шаблонов GOF, например. Креативная, структурная, поведенческая. A factory, где вы могли бы описать случай определенного типа проблемы, и это даст вам набор классов, которые его разрешили.
- meta-meta-meta-metaclass (насколько я мог бы идти), это шаблон factory factory, factory, о котором вы могли бы рассказать о типе своей проблемы, и это даст вам шаблон factory, чтобы спросить.
Я нашел несколько вещей об этом в Интернете, но в основном не очень полезен. Одна из проблем заключается в том, что разные языки немного определяют метаклассы.
Кто-нибудь еще использовал метаклассы, подобные этому в python/где-либо еще, или видел, что это используется в дикой природе, или думал об этом? Каковы аналоги на других языках? Например. в С++ насколько глубока рекурсия шаблона?
Я бы очень хотел исследовать его дальше.