#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]
. Не могу сказать, что понимаю почему, но это работает именно так.