示例:mypkg/submodule.py
裏面有MyClass
類。我如何說服Python在導入包時從子模塊導入類?
我希望能夠做到:
import mypkg
obj = MyClass()
我需要爲了與默認導入這項工作做什麼?
我注意到,from pkg import *
和import pkg.submodule
工程正在工作,但我想更改默認導入的行爲。
這與__init__.py
和__all__
明顯相關。
示例:mypkg/submodule.py
裏面有MyClass
類。我如何說服Python在導入包時從子模塊導入類?
我希望能夠做到:
import mypkg
obj = MyClass()
我需要爲了與默認導入這項工作做什麼?
我注意到,from pkg import *
和import pkg.submodule
工程正在工作,但我想更改默認導入的行爲。
這與__init__.py
和__all__
明顯相關。
你不能這樣做通常(我想用一些瘋狂的黑客它可能是)。你要麼有:
from mypkg.submodule import MyClass
或者,如果你設置__init__.py
在包裝得當,你可以有:
from mypkg import MyClass
這是不可能的,一個簡單的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()
你能詳細說明一下嗎?這回答了你的問題了嗎? –
我怎麼會恨,如果這是可能的!沒有人可以知道'MyClass'從哪裏彈出。 '從pkg import *'存在已經夠糟糕了。 (好吧,後者對於交互式使用非常方便。) –