迟初始化的复杂模块导入

0 投票
1 回答
774 浏览
提问于 2025-04-16 12:40

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

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()

撰写回答