带有自定义类的插件
在 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]