使用延迟初始化导入Tricky模块

时间:2011-02-28 12:24:15

标签: python module import

我有一个简单的模块结构:

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 中删除)?

布里

1 个答案:

答案 0 :(得分:0)

您只需将相关代码放入单独的模块中即可。

mod1/
    __init__.py
    clsOne.py
    clsN.py
    foo.py

然后在foo.py

from clsOne import MyFirstCLass
from clsN import NThCLass

clshnd = MyFirstClass()
...
nhnd = NThClass()