2.1.2.7 插件注册系统
这是一个不会修改类的类修饰器,但是,只要将它放在全局注册域。它会掉入返回原始对象的修饰器类别中:
In [21]:
class WordProcessor(object):
PLUGINS = []
def process(self, text):
for plugin in self.PLUGINS:
text = plugin().cleanup(text)
return text
@classmethod
def plugin(cls, plugin):
cls.PLUGINS.append(plugin)
@WordProcessor.plugin
class CleanMdashesExtension(object):
def cleanup(self, text):
return text.replace('—', u'\N{em dash}')
这里我们用修饰器来分权插件注册。修饰器是名词而不是动词,因为我们用它来声明我们的类是WordProcessor
的一个插件。方法plugin
只是将类添加到插件列表中。
关于这个插件本身多说一句:它用实际的Unicode的em-dash字符替换了em-dash HTML实体。它利用unicode绝对标记来通过字符在unicode数据库(“EM DASH”)中的名字来插入字符。如果直接插入Unicode字符,将无法从程序源文件中区分en-dash。