Я пишу парсер для внутреннего формата метаданных на основе xml в python. Мне нужно предоставить разные классы для обработки разных тегов. Потребуется довольно большая коллекция обработчиков, поэтому я представлял ее как простую систему плагинов. Я хочу просто загрузить каждый класс в пакете и зарегистрировать его в моем парсере.
Моя текущая попытка выглядит так:
(Обработчики - это пакет, содержащий обработчики, каждый обработчик имеет теги статического члена, который является кортежем строк)
class MetadataParser:
def __init__(self):
#...
self.handlers={}
self.currentHandler=None
for handler in dir(Handlers): # Make a list of all symbols exported by Handlers
if handler[-7:] == 'Handler': # and for each of those ending in "Handler"
handlerMod=my_import('MetadataLoader.Handlers.' + handler)
self.registerHandler(handlerMod, handlerMod.tags) # register them for their tags
# ...
def registerHandler(self, handler, tags):
""" Register a handler class for each xml tag in a given list of tags """
if not isSequenceType(tags):
tags=(tags,) # Sanity check, make sure the tag-list is indeed a list
for tag in tags:
self.handlers[tag]=handler
Однако это не работает. Я получаю ошибку AttributeError: 'module' object has no attribute 'tags'
Что я делаю неправильно?