У меня есть классы Python, которые должны динамически загружаться во время выполнения.Класс может иметь различные атрибуты и функции.Я создаю такие классы с type
:
my_class = type("ClassName", (object, ), {'string_attr': "My String",
'int_attr': 42,
'my_function': lambda self, a, b: a+b})
Вся информация о классе (имя, родитель, атрибуты, функции) должна храниться в постоянном слое (базе данных).Это позволяет мне изменять атрибуты и функции.
Теперь к моей проблеме: Очевидно, я не могу сохранить лямбда-выражение (объект) в базе данных.Там я вижу два подхода:
Сначала я сохраняю лямбда-выражение в виде строкового представления.К сожалению, это требует, чтобы я оценивал лямбда-строки с eval()
, когда я генерирую свой класс.
Во-вторых, я сериализую лямбда-выражение и сохраняю его.Всякий раз, когда я хочу создать свой класс, я должен десериализовать лямбда-выражение.
В обоих подходах я должен различать атрибуты и функции.Атрибуты могут быть преобразованы напрямую, а функции нуждаются в дальнейшей обработке.
Мой подход совершенно неверен?Есть ли хорошие альтернативы?