2 Плагины с настроенными классами

В Python 3.6, РЕР 487 добавил __init_subclass__ специального метода, который упрощает и расширяет класс настройку без использования метаклассов . Следовательно, эта функция позволяет создавать простой плагины . Здесь мы демонстрируем эту функцию путем изменения предварительного примера :

 class Base:
    plugins = []

    def __init_subclass__(cls, **kwargs):
        super().__init_subclass__(**kwargs)
        cls.plugins.append(cls)

    def test(self):
        print("Base.")

class PluginA(Base):
    def test(self):
        super().test()
        print("Plugin A.")


class PluginB(Base):
    def test(self):
        super().test()
        print("Plugin B.")

 

Результаты:

 PluginA().test()
# Base.
# Plugin A.

PluginB().test()
# Base.
# Plugin B.

Base.plugins
# [__main__.PluginA, __main__.PluginB]