Я работаю над проектом, который требует большой базы данных python объектов, каждый из которых имеет ровно два метода: __init__
и __call__
. init
определяет атрибуты, указывающие c для каждого объекта, а метод call
содержит определение функции, параметризованной атрибутами. Прямо сейчас я представляю эту базу данных с помощью большого .py
файла, содержащего все объекты. Например, первые две записи в файле myfuncs.py
выглядят примерно как
class Alice:
def __init__(self, a=10, b=4):
self.a = a
self.b = b
self.color = "red"
def __call__(self, X):
return X**2 + self.a + self.b
class Timmy:
def __init__(self, h=1):
self.a = a
self.color = "blue"
def __call__(self, X):
return X**4*self.h
Я мог бы использовать эти классы в отдельной программе:
from myfuncs import Alice
model = Alice(a=10)
y = model(15)
print("The value was ", str(y), " and the color is ", model.color)
Обратите внимание, что метод init
для обоих объектов содержит жестко заданный атрибут color
и значение, заданное c для этого объекта. Все объекты в базе данных имеют этот атрибут, и в настоящее время единственный способ связать этот атрибут с объектом - использовать жестко заданное значение в конструкторе.
Вместо того, чтобы иметь один длинный .py
файл с кучей объектов (и много шаблонного кода), мне кажется, что должен быть какой-то способ определить базу данных объектов, каждый с атрибутом color
и другим атрибутом function
, который содержит содержимое __call__()
аргументы метода и ключевого слова по умолчанию. Однако после импорта указанного объекта c мне нужно, чтобы он обрабатывался как нативная функция Python, поэтому я не уверен, что сохранение функций в виде строк с последующим использованием exec
будет работать.
Хотя мой минимальный пример может показаться надуманным, в моем приложении эти объекты содержат в своих call
методах сложную математическую формулу, записанную как Python функции, ключевое слово args - значения параметров в этих формулах, а свойство color
- метка, связанная с каждой формулой, которая обозначает ее группу симметрии (это то, что я знаю о каждой функции из внешней информации).
Как лучше всего структурировать мой проект?