from typing import Dict, Type
class PluginMeta(type):
"""Метакласс, который автоматически регистрирует все плагины."""
registry: Dict[str, Type] = {}
def __new__(mcs, name, bases, attrs):
cls = super().__new__(mcs, name, bases, attrs)
if name != "PluginBase":
mcs.registry[name] = cls
print(f"🔌 Зарегистрирован плагин: {name}")
return cls
class PluginBase(metaclass=PluginMeta):
"""Базовый класс для всех плагинов."""
def run(self):
raise NotImplementedError("Плагин должен реализовать метод run()")
class DataProcessor(PluginBase):
"""Пример плагина."""
def run(self):
print("📊 Обработка данных...")
class ReportGenerator(PluginBase):
"""Ещё один плагин."""
def run(self):
print("📄 Генерация отчёта...")
if __name__ == "__main__":
try:
print(f"Всего зарегистрировано плагинов: {len(PluginMeta.registry)}")
for name, plugin_cls in PluginMeta.registry.items():
plugin = plugin_cls()
plugin.run()
print("\n✅ Все плагины успешно выполнены!")
except Exception as e:
print(f"Ошибка: {e}")
📌 Метаклассы позволяют контролировать создание классов: автоматически регистрировать плагины, добавлять методы, валидировать атрибуты и многое другое. Это один из самых мощных и «волшебных» инструментов Python для создания фреймворков и плагин-систем.
Подпишись 👉🏻 @KodduuPython 🤖