Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在运行时向Python模块添加属性,以便稍后导入_Python_Python 2.7_Flask_Flask Principal - Fatal编程技术网

在运行时向Python模块添加属性,以便稍后导入

在运行时向Python模块添加属性,以便稍后导入,python,python-2.7,flask,flask-principal,Python,Python 2.7,Flask,Flask Principal,在运行时,我在循环中使用以下方法向模块添加属性: this_module = sys.modules[__name__] setattr(this_module, attr_name, attr_value) 当我从模块中调用print diru模块时,它会显示属性。太好了 当我导入模块并尝试在装饰器中使用该属性时,会不断抛出AttributeError异常。为了调试,我在导入的模块上调用了dir,没有列出任何动态添加的属性 我甚至为导入*将属性名添加到了_uall _uu,但仍然一无所获 任

在运行时,我在循环中使用以下方法向模块添加属性:

this_module = sys.modules[__name__]
setattr(this_module, attr_name, attr_value)
当我从模块中调用print diru模块时,它会显示属性。太好了

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

我甚至为导入*将属性名添加到了_uall _uu,但仍然一无所获

任何想法都很好。另外,请让我知道我可能遗漏的任何术语。我在谷歌上找不到答案

-

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

app.security = dict()
在循环中:

app.security[attr_name] = attr_value
在使用decorator的模块中,“time_entry”是一个属性名,它包含一个类实例:

@app.security['time_entry'].need()
当我尝试启动服务器时,现在出现以下错误:

    @security["time_write"].require()
             ^
    SyntaxError: invalid syntax
我已经为我的特殊问题创建了一个解决方案。这不是一个解决方案,我仍然计划在这个项目完成后进一步研究它

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

class Security: pass
app.security = Security()
然后,我直接将属性设置为安全类:

setattr(app.security, attr_name, attr_value)

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

为什么要这样做而不仅仅是使用顶级字典?您确定在设置属性后调用装饰器吗?您还可以尝试执行全局attr\u name,后跟attr\u name=attr\u value。@凯文:但不能将字典用作修饰符,对吗?我必须能够在装饰器中调用它。@CristianCiupitu:属性名称和值是从数据库动态创建的。我认为它在这种情况下不起作用。你也不能用一个模块作为装饰器。装饰器同样可以很好地访问字典或模块。