示例: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 *'存在已经够糟糕了。 (好吧,后者对于交互式使用非常方便。) –