Python中的优雅反射?

时间:2014-03-02 10:47:13

标签: python reflection

我有少量不同的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的亮点吗?

1 个答案:

答案 0 :(得分:1)

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

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