我想做的是这样的:
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 *
部分——在许多建议不要使用它的问题中,你会遇到一个问题:它执行 <当时绑定(bind)的任何模块级名称的 strong>快照(或者只是模块中 __all__
中列出的名称,如果已定义)——将来对名称绑定(bind)的更改将永远不会反射(reflect)在以前执行 import *
的模块中。
为什么您认为需要将 template_module
的命名空间合并到导入模块的命名空间中?如果你只是做了一个常规的 import template_module as tm
,那么简单地将所有相关名称引用为 tm.this
,tm.that
就可以了很好(包括在使用时获取绑定(bind)的所有更改——换句话说,它使用您在此处似乎需要的“后期绑定(bind)”方法)。
我是一名优秀的程序员,十分优秀!