2015-05-27 3 views
1

Есть ли способ использовать строку (в моем случае, прочитанную из файла), чтобы найти класс с именем, соответствующим строке, а затем создать экземпляр этого класса. Например:Создание экземпляров класса на основе имени строки класса

class FirstClass: 
    def __init__(self, arg1): 
     self.arg = arg1 

values = ','.split('FirstClass', 'argument') 
# need the magic for this: 
values[0](*values[1:]) 

Но, конечно, с помощью values[0] не работает там, потому что это строка, а не класс. Есть ли способ автоматически преобразовать строку в класс там? Особенно, если у меня много классов и я не могу заранее знать, какой из них нужно создать, например, считывать значения из CSV и желать, чтобы правильный класс обрабатывал строку.

ответ

4

Вы можете получить доступ к переменной по имени, используя locals() или globals() соответственно. В вашем случае это будет работать как таковое:

locals()[values[0]](*values[1:]) 
+3

Возможно, вы хотите использовать 'globals()', хотя он работает в пределах области функций. Также см. Этот ответ, если класс является частью другого модуля, который вы хотите динамически загружать. Http://stackoverflow.com/questions/452969/does-python-have-an-equivalent-to-java-class-forname –

Смежные вопросы