python模块__init__函数

时间:2015-03-08 10:26:17

标签: python module initialization

有没有办法为模块(而不是包)制作隐式初始化器? 类似的东西:

#file: mymodule.py
def __init__(val):
    global value
    value = 5

当你导入它时:

#file: mainmodule.py
import mymodule(5)

2 个答案:

答案 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