У меня есть несколько классов, импортированных в код, но мне нужно создать экземпляры только тех классов, которые указаны в текстовом файле. Так что у меня есть что-то вроде этогоPython: создать класс из строк в файле с аргументами
from module1 import c1
from module2 import c2
...
и в текстовом файле у меня есть список только тех классов, которые я хочу, чтобы создать экземпляр как
c1()
c2(True)
...
, поэтому я хочу, чтобы прочитать файл строки в списке (классы) и сделать что-то вроде
for i in classes:
classes_list.append(i)
, так что каждый элемент списка является экземпляром класса. Я старался делать это на основе других решений я нашел здесь
for i in classes:
classes_list.append(globals()[i])
, но я всегда получаю эту ошибку
KeyError: 'c1()'
или
KeyError: 'c2(True)'
Любые идеи, как нечто подобное могло быть возможно?
Есть ли причина, вы не хотите использовать [ ' pickle'] (HTTPS: //docs.p ython.org/3/library/pickle.html) вместо этого странного текстового формата? – Kevin
Не совсем, все, что работает, прекрасно. Единственное требование состоит в том, чтобы список классов нужно было читать из текстового файла, так как другие люди будут определять, какие классы они хотят использовать, и я не знаю, какие из них они выберут. Также люди могли бы хотеть c2 с True или False как аргумент, и у меня также нет способа узнать – Atirag
Насколько сложны эти строки? 'c2 (True)' okay Я могу иметь True/False. Могу ли я иметь несколько параметров? Целые? Как насчет математики (например, 'c2 (1 + 3)')? Здесь вы определяете мини-язык, и это может стать затруднительным. Вы можете сделать 'eval (line)' для каждой строки в файле, чтобы пользователь мог добавлять полные выражения python, например, вызывать несколько функций 'c2 (c1())'. – tdelaney