Python 3.9 если строка соответствует имени класса, создайте экземпляр класса (создайте экземпляр определенного класса динамически)

#python #python-3.x #python-class

#python #python-3.x #python-class

Вопрос:

Я хотел бы создать экземпляр одного класса, если строка var соответствует имени класса. В подобных вопросах, похоже, существует зависимость от того, что имя класса известно в начале. В моем случае я знаю только, что входная строка будет соответствовать имени класса. Я хочу использовать строку, чтобы определить, какой класс (из многих вариантов) Мне нужно создать экземпляр. Т.Е. Загрузить класс с тем же именем, что и строка;

If string-var == a class (in a module file) in a directory, instantiate that class.

Я думал, что новый getattr поможет, но, похоже, это относится к методам / функциям, а не к самому классу. Я также рассматривал issubclass, но параметр должен быть классом, а не строкой. Любые предложения приветствуются!

Ответ №1:

Вы должны явно определить интерфейс, который сопоставляет общедоступную строку со ссылкой на класс:

 class Foo:
    ...

class Bar:
    ...

classes = {"foo": Foo, "bar": Bar}
 

Затем вы можете найти соответствующий класс в dict, используя свою строку (которая, как вы заметите, не обязательно должна быть именем класса).:

 cls_name = "foo"

obj = classes[cls_name]()
 

Комментарии:

1. Спасибо! Пришлось удалить (), так что последнее задание есть obj = classes[cls_name] . Не могу сказать, что понимаю почему, но это работает именно так.