파이썬에서 내부 XML 기반 메타 데이터 형식에 대한 파서를 작성하고 있습니다. 다른 태그를 처리하기 위해 다른 클래스를 제공해야합니다. 다소 큰 핸들러 컬렉션이 필요하기 때문에 간단한 플러그인 시스템으로 생각했습니다. 내가 원하는 것은 모든 클래스를 패키지에로드하고 그것을 파서에 등록하는 것입니다. 나의 현재의 시도는 다음과 같습니다
이 간단한 파이썬 플러그인 시스템
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'
무엇이 잘못 되었나요?
들여 쓰기를 수정했습니다. – SilentGhost
실제로 많은 정보를 제공하지 않습니다. 오류 메시지는 아마도 * 오류가 발생한 행 *에서 문제를 정확하게 지적하는 데 도움이 될 것입니다. 또한 코드에는 구문 오류 (클래스 이름 뒤에 콜론이 누락 됨)가 있기 때문에 여기에 게시 한 내용이 전혀 실행되지 않습니다. 또한 오류는 게시하지 않은 코드의 일부분 일 수 있습니다. – sth