有没有办法为模块(而不是包)制作隐式初始化器? 类似的东西:
#file: mymodule.py
def __init__(val):
global value
value = 5
当你导入它时:
#file: mainmodule.py
import mymodule(5)
答案 0 :(得分:3)
import
语句使用builtin __import__
function
因此,不可能有模块__init__
功能。
你必须自己打电话:
import mymodule
mymodule.__init__(5)
答案 1 :(得分:0)
这些东西通常不是重复的,所以这是Pass Variable On Import的一个非常好的解决方案。 TL; DR:使用配置模块,在导入模块之前对其进行配置。
[...]一种更简洁的方法,对多种配置非常有用 项目中的项目是创建单独的配置模块 首先由包装代码导入,并设置为的项目 运行时,在功能模块导入之前。这种模式是 经常用于其他项目。
myconfig / __ init__.py:
PATH_TO_R_SOURCE = '/default/R/source/path' OTHER_CONFIG_ITEM = 'DEFAULT' PI = 3.14
mymodule / __ init__.py:
import myconfig PATH_TO_R_SOURCE = myconfig.PATH_TO_R_SOURCE robjects.r.source(PATH_TO_R_SOURCE, chdir = True) ## this takes time class SomeClass: def __init__(self, aCurve): self._curve = aCurve if myconfig.VERSION is not None: version = myconfig.VERSION else: version = "UNDEFINED" two_pi = myconfig.PI * 2
您可以在运行时更改模块的行为 包装器:
run.py:
import myconfig myconfig.PATH_TO_R_SOURCE = 'actual/path/to/R/source' myconfig.PI = 3.14159 # we can even add a new configuration item that isn't present in the original myconfig: myconfig.VERSION="1.0" import mymodule print "Mymodule.two_pi = %r" % mymodule.two_pi print "Mymodule.version is %s" % mymodule.version
<强>输出:强>
> Mymodule.two_pi = 6.28318 > Mymodule.version is 1.0