2013-02-21 3 views
2

팩토리 함수, 수퍼 클래스 및 두 개의 하위 클래스가 포함 된 작업 모듈이 있습니다. 실제 모듈은 here입니다.단일 모듈에서 슈퍼 채트 및 슈퍼 채트

팩토리를 자체 파일로 분할하고 두 개의 하위 클래스를 명령/디렉토리에 넣으면 내 슈퍼를 포함하는 모듈에서 내 서브 시스템을 가져 오기 때문에 발생하는 재귀 문제를 해결할 수 있습니다. 내가 모든 것을 제대로 수입을 생각할 때 그냥 공장이 서브 클래스의 빈 목록 붙어

내가하려고하면

for cls in Command.__subclasses__(): 
+1

목록을 보는 시점에 실제로 명령 가져 오기 클래스를 가져 왔습니까? –

+2

주 :'__subclassess__'는 CPython 최적화 세부 사항입니다. 언어 기능으로 사용하지 마십시오. –

+1

http://stackoverflow.com/questions/3048337/python-subclasses-not-listing-subclasses @MartijnPieters가 지적한대로 구현 의존적 일뿐만 아니라'__subclasses __()'도 꽤 까다 롭습니다. 'metaclass'를 시도해 보셨습니까? 하위 클래스를 팩토리 또는 다른 구조에 등록 할 때 이런 종류의 문제를 본 적이 한번도 없습니다. –

답변

0

그것은 꽤 아니지만 작동합니다. 문자열을 클래스 이름으로 변환하는 좀 더 우아한 방법을 좋아합니다. __subclasses__를 통해 루핑하는 것은 실제로 너무 까다 롭습니다. 나는 단지 그것을 적용하기에 충분할 정도로 메타 클래스를 이해하지 못한다.

from commands.shVersionCmd import shVersionCmd 
from commands.shVRFCmd import shVRFCmd 
def CommandFactory(commandnode): 
    if commandnode.attrib['name'] == 'shVersionCmd': return shVersionCmd(commandnode)   
    if commandnode.attrib['name'] == 'shVRFCmd': return shVRFCmd(commandnode)