迟初始化的复杂模块导入
我有一个很简单的模块结构:
mod1/
__init__.py
clsOne.py
clsN.py
代码看起来是这样的:
__init__.py:
# module init
from clsOne import MyFirstCLass
from clsN import NThCLass
clshnd = MyFirstClass()
...
nhnd = NThClass()
clsOne.py:
class MyFirstClass( object ):
pass
clsN.py:
classNThClass( object ):
pass
现在我这样使用它们:
Way #1)
from mod1.clsOne import MyFirstClass
或者:
Way #2)
from mod1 import clshnd
我想知道是否可以只导入名为 clshnd
的部分,而其他的处理器(比如 nhnd
)只有在需要的时候才初始化(也就是在明确导入的时候)?
目前,无论是方法 #1 还是方法 #2 都会导致模块初始化被调用,这意味着:NThClass 对象也会被创建。我想避免这种情况,因为我有很多这样的类,并且希望避免长时间的初始化,但我也希望能简单访问(方法 #2)。
这有可能吗,还是我必须重新设计模块和文件(从 init 中移除)?
Zbigniew
1 个回答
0
你只需要把相关的代码放到一个单独的模块里。
mod1/
__init__.py
clsOne.py
clsN.py
foo.py
然后在 foo.py
文件中:
from clsOne import MyFirstCLass
from clsN import NThCLass
clshnd = MyFirstClass()
...
nhnd = NThClass()