【发布时间】:2020-06-17 10:59:49
【问题描述】:
我正在处理一个需要大型 python 对象数据库的项目,每个对象都有两种方法:__init__ 和 __call__。 init 定义特定于每个对象的属性,而 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 和一个特定于该对象的值。数据库中的所有对象都有这个属性,目前唯一能将该属性与对象关联的方法是通过构造函数中的硬编码值。
与其拥有一个包含一堆对象(以及大量样板代码)的长 .py 文件,在我看来应该有某种方法来定义对象数据库,每个对象都有一个属性 color另一个属性function 包含__call__() 方法和默认关键字参数的内容。但是,在导入特定对象后,我需要将其视为原生 Python 函数,因此我不确定将函数存储为字符串然后使用 exec 是否有效。
虽然我的最小示例可能看起来做作,但在我的应用程序中,这些对象在其 call 方法中包含编写为 Python 函数的复杂数学公式,关键字 args 是这些公式中的参数值,而属性 color 是与表示其对称群的每个公式相关联的标签(这是我从外部信息中了解的有关每个函数的信息)。
构建项目的最佳方式是什么?
【问题讨论】:
-
您能展示一下您稍后是如何使用这些课程的吗?
-
谢谢,我添加了一个示例导入和有关我的应用程序的更多信息(复杂数学公式的数据库)
标签: python database oop data-structures