2011-11-29 69 views
2

示例:mypkg/submodule.py里面有MyClass类。我如何说服Python在导入包时从子模块导入类?

我希望能够做到:

import mypkg 
obj = MyClass() 

我需要为了与默认导入这项工作做什么?

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

这与__init__.py__all__明显相关。

+2

我怎么会恨,如果这是可能的!没有人可以知道'MyClass'从哪里弹出。 '从pkg import *'存在已经够糟糕了。 (好吧,后者对于交互式使用非常方便。) –

回答

5

你不能这样做通常(我想用一些疯狂的黑客它可能是)。你要么有:

from mypkg.submodule import MyClass 

或者,如果你设置__init__.py在包装得当,你可以有:

from mypkg import MyClass 
1

这是不可能的,一个简单的Python的进口只会模块添加到当前的命名空间。

现在有导入MyClass 3个备选方案:

# 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() 
+3

你能详细说明一下吗?这回答了你的问题了吗? –