在导入包时,如何说服Python从子模块导入类?

时间:2011-11-29 13:59:50

标签: python

示例:mypkg/submodule.py内置了MyClass类。

我希望能够做到:

import mypkg
obj = MyClass()

为了使用默认导入功能,我需要做些什么?

我注意到from pkg import *import pkg.submodule工作正常,但我想更改默认导入的行为。

这显然与__init__.py__all__相关。

2 个答案:

答案 0 :(得分:5)

你不能正常地做到这一点(我想有一些疯狂的黑客可能是可能的)。你要么:

from mypkg.submodule import MyClass

或者,如果您在包中正确设置__init__.py,则可以:

from mypkg import MyClass

答案 1 :(得分:1)

这是不可能的,一个简单的python导入只会将模块添加到当前命名空间。

现在有3种方法可以导入MyClass

# mypkg/__init__.py
from submodule import MyClass
__all__ = ["MyClass"]

# mypkg/submodule.py
def MyClass(obj):
    pass

# test-usage.py
import mypkg
mypkg.MyClass()

# test-usage-2.py
from mypkg import MyClass
MyClass()

# test-usage-3.py
from mypkg import *
MyClass()