Я пытаюсь определить класс динамически, а затем его экземпляр. Для этого, что я делаю, у меня есть определение класса как строка, и я кормлю его функции eval, чтобы определить ее во время выполнения.Динамически загружать классы в Python
f="""class f:
def pr(self):
print "asdfg"
"""
>>> eval(f)
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
eval(f)
File "<string>", line 1
class f:
^
SyntaxError: invalid syntax
Почему я делаю это потому, что есть много классов, которые могут быть использованы, но редко они все необходимы вместе. Кроме того, я разрешаю пользователю добавлять новые классы в приложение.
Заранее спасибо.
Редактировать -------------------
Это питон 2,5 выход
data = """class f:
def pr(self):
print "asdfg"
"""
>>> exec(data)
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
exec(data)
File "<string>", line 4
^
SyntaxError: invalid syntax
#What i think the problem is "\n"
>>> data
'class f:\n def pr(self):\n print "asdfg"\n '
им не уверен, но это где ошибка указывает.
Причина использования python 2.5 заключается в том, что scapy является частью программы и имеет поддержку только для python 2.5.
Если ** пользователям ** вашей программы необходимо создать новые классы, вы делаете что-то неправильно. – jterrace
Вы пытаетесь создать какую-то систему плагинов, где 'f' будет заполняться содержимым исходного файла Python? – ixe013
@ ixe013: да, я думаю, что приведенное ниже решение будет работать. я фактически забыл об этом «exec()». – TheCreator232