帶有自定義類的外掛

在 Python 3.6 中, PEP 487 新增了 __init_subclass__ 特殊方法,它簡化並擴充套件了類定製,而不使用元類 。因此,此功能允許建立簡單的外掛 。在這裡,我們通過修改先前的示例來演示此功能 :

Python 3.x >= 3.6

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]