Python中的优雅反射?

Python中的优雅反射?,python,reflection,Python,Reflection,我有少量不同的Python类(每个类代表不同类型的策略)和大量的配置(例如参数)。目前,我已将配置组织在json文件中,可能如下所示: { "script": "xyz.strategy.strategyA", "datafile": "//datasrv10//data$//data//bloom.csv", "assets": ["B EQUITY","A EQUITY"], ... } 因此,我必须使用某种反射来初始化正确的类。我发现importlib就是为了这个目的。我设法导

我有少量不同的Python类(每个类代表不同类型的策略)和大量的配置(例如参数)。目前,我已将配置组织在json文件中,可能如下所示:

{
 "script": "xyz.strategy.strategyA",
 "datafile": "//datasrv10//data$//data//bloom.csv",
 "assets": ["B EQUITY","A EQUITY"],
 ... 
}
因此,我必须使用某种反射来初始化正确的类。我发现importlib就是为了这个目的。我设法导入了模块。现在,每个脚本都是自己的模块,每个模块都有一个具有相同界面的构建函数:

def build(configuration, data):
    return Risk(configuration, data)


class Risk(Strategy):

在我看来,所有这些都像是糟糕的老式Java。有人能用Python给我演示一下吗?

如果您需要此设置的某种配置,那么就没有灵丹妙药了。您可以使用json、yaml或关系数据库来存储配置。允许python代码用于配置可能会带来一些改进,但如果可以从外部提供配置,则会产生安全问题


第二步是将配置转换为实际的python类实例,分配正确的参数等。
importlib
非常适合这一目的,这里没有太多需要改进的地方。您的类需要某种工厂,只是尽量不要抽象太多(这非常像Java,而不是Python),也许有一种全局方法能够完全基于配置片段创建对象?

哪里应该发光?删除构建函数,初始化类(或实例?),每个类都有自己的模块,是否有固定数量的类?有固定数量的文件吗?是json类(每个json一个类)?构建函数看起来一样吗?进口有问题吗?从您展示的代码中,我无法概括到许多类/文件-这就是问题的原因。