我想做的是这样:
template.py
def dummy_func():
print(VAR)
# more functions like this to follow
fabfile.py
# this gets called by fabric (fabfile.org)
# safe to think of it as ant build.xml
import template
template.VAR = 'some_val'
from template import *
也就是说,我有一个模板模块,其他模块应该“扩展”贡献所需的变量。 这可以用函数方式完成吗(与对象继承相反)?在
编辑:增加了一点代码。在
我不知道你所说的“功能性方式”是什么意思,像functional programming?这是不会发生的(因为你本质上是在试图修改一个对象,这是FP的反面)。或者你是说“一种有效的方式”?在
对于后一种解释,最大的问题是
import *
在建议不要使用它的许多问题中,import *
将运行一个smack:它执行一个快照,不管模块级别的名称何时被绑定(或者只是那些在模块中__all__
中列出的名称,如果已经定义)以后对名称绑定的更改将永远不会反映在以前执行import *
的模块中。在为什么您认为需要将
template_module
的名称空间合并到导入模块的名称空间中?如果您只是做了一个常规的import template_module as tm
,那么简单地将所有相关名称称为tm.this
,tm.that
就可以了(包括获取到使用瞬间对绑定的所有更改,换句话说,它使用您在这里似乎需要的“后期绑定”方法)。在如果你在一个地方改变了一个模块的属性,那么在其他地方也是一样的。证明:
创建文件'/tmp/test1.py':
那么
^{pr2}$现在操作系统路径即使在主应用程序中也是空字符串,zzz也无处不在。在
原来这是一个以结构为中心的解决方案。
所以你有一个抽象的__模板.py和混凝土工厂文件.py这应该“扩展”提供一些必需变量(例如项目名称)的模板。
我已经使用fab的env字典实现了它。
在模板文件中引用
env.VAR
和“concrete”工厂文件.py这样做:相关问题 更多 >
编程相关推荐