В вашем вопросе чего-то не хватает, поэтому я вынужден угадать пропущенные вещи. Не стесняйтесь редактировать свой вопрос, чтобы исправить упущения.
class ProcessDirector( object ):
# does something
class ID12345( SomeKindOfProcess ):
pass
class ID001234( SomeKindOfProcess ):
pass
idList= [ID12345, ID01234]
theProcessDirector = ProcessDirector()
for id in idList:
builder = id() #Instantiate an object from the class object
theProcessDirector.construct(builder)
builder.run()
Это работает очень хорошо. Он не создается из строки - на практике вы не часто этого хотите. Иногда, но редко. Чаще всего вы представляете список объектов класса, из которого вы хотите получить объекты экземпляра.
Если вы на самом деле получаете имена классов из командной строки, то вы должны внести следующее небольшое изменение.
validClasses = [ ID12345, ID01234 ]
validMap = dict( ( (c.__name__, c) for c in validClasses ) )
nameStrings = [ "ID12345", "ID01234" ] # from your command-line
idList= [ validMap[s] for s in nameStrings ]
Все остальное остается прежним.
[Также, если возможно, попробуйте начинать имена переменных экземпляра строчными буквами. Имена, начинающиеся с заглавных букв, обычно являются именами классов.]
Редактировать
Удалено eval
. Несмотря на то, что eval()
абсолютно не дыра в безопасности. Eval (и exec
и execfile
) являются проблемой, только если кто-то специально предоставляет доступ злоумышленникам.