Генерирование кода Python из самого объекта класса практически невозможно. Вам нужно сохранить инструкции для генерации класса другим способом.
Наилучшим способом может быть наличие функции для создания класса, а также ее импорт и вызов в сгенерированном коде. Таким образом, сгенерированный код будет выглядеть так:
kwargs = {answer=42, name='foo'}
import class_maker
SomeClass1 = class_maker.make_class(**kwargs)
Другой вариант - сгенерировать код Python, который вы хотите напрямую, exec
чтобы создать класс, а затем сохранить его вместе с классом.
code = '''class MyClass:
pass
'''
the_locals = {}
exec(code, globals(), the_locals)
MyClass = the_locals['MyClass']
MyClass._code = code
Как всегда с exec
, будьте очень осторожны при его использовании. Он может запустить любой код Python. Подумайте, если есть какой-то способ сделать то, что вам нужно, по-другому. Люди будут кричать на вас за использование exec
. (Но даже стандартная библиотека Python использует ее для динамических классов , иногда .)