2011-11-29 51 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

你能詳細說明一下嗎?這回答了你的問題了嗎? –