0

我在运行时使用循环内的以下内容向模块添加属性:

this_module = sys.modules[__name__]
setattr(this_module, attr_name, attr_value)

当我print dir(this_module)从模块调用时,它会显示属性。伟大的!

当我导入模块并尝试在装饰器中使用该属性时,AttributeError会不断抛出异常。为了调试,我调用dir()了导入的模块,并且没有列出任何动态添加的属性!

__all__我什至为 the添加了属性名称,但import *仍然没有!

任何想法都会很棒。另外,请让我知道我可能遗漏的任何术语。我无法在 Google 中找到答案。

--

根据 Kevin 的建议,我在我的 Flask 应用程序中添加了一个字典(而不是他的顶级建议,只是为了便于测试)并将这些属性添加到其中:

app.security = dict()

在循环:

app.security[attr_name] = attr_value

在使用装饰器的模块中('time_entry' 是一个属性名称,它包含一个类实例):

@app.security['time_entry'].need()

当我尝试启动服务器时,我现在收到此错误:

    @security["time_write"].require()
             ^
    SyntaxError: invalid syntax
4

1 回答 1

0

我已经为我的特定问题创建了一个解决方法。这不是一个解决方案,一旦这个项目完成,我仍然计划进一步调查它。

我创建了一个虚拟类,然后在我的 Flask 应用程序中使用它的实例设置一个属性。

class Security: pass
app.security = Security()

然后,我将属性直接设置为 Security 类:

setattr(app.security, attr_name, attr_value)

同样,它不能解决为什么我在运行时创建的那些模块级属性没有被导入。一旦我得到这个问题的答案,我会回来编辑这个。

于 2015-02-28T16:49:48.950 回答