繁体   English   中英

Python-从包中导入所有类时是否可以导入特定类

[英]Python - Can I import specific classes when importing all from a package

我有一个像树形结构的软件包

pkg\  
    __init__.py  
    module1.py  
        Class11  
        Class12  
    module2.py  
        Class21  
        function21  

我希望特定的类和函数位于全局名称空间中,以便当我使用以下命令启动脚本时

from pkg import *

我将能够直接使用Class11,Class12和function21。 这可能吗? 其背后的动机是允许在小型脚本或交互模式下快速轻松地使用。 隐含地知道,使用更长的脚本时,将不会使用全部导入并正确遍历包结构。

编辑:我可以在pkg的__init__.py导入Class11,Class12和function21,但是通过这种方式,当我执行常规import pkg我仍然能够通过pkg.Class11而不是适当的pkg.module1.Class11访问Class11。 。 如果我不执行import *则最好让pkg.module1.Class11是唯一方法。

当然。 *表示“一切”。 *如果您不想要所有内容,而是想要一个特定的名称列表,请使用这些名称:

from pkg import Class11, Class21, function21

当然,这假定pkg已经从其子模块中导入了这些名称。 但是,如果那不是真的,那么您的*导入也不起作用。

如果那不是真的,但是您想知道如何实现,那么只需在pkg/__init__.py执行类似的pkg/__init__.py

from .module1 import Class11, Class12
from .module2 import Class21, function21

或者可能:

from .module1 import __all__ as _all1
from .module2 import __all__ as _all2
from .module1 import *
from .module2 import *

__all__ = _all1 + _all2

*嗯,不是“一切”。 如果有__all__ ,则表示“ __all__每个名称”; 如果不是,则表示“每个不以_开头的名称”。 但是足够接近我们的目的。

是的你可以。 看看Flask在这里什么:

基本上,您可以像这样在__init__.py导入函数和类:

from .app import Flask, Request, Response
from .config import Config

现在我们可以做:

from Flask import Flask ,Request

像这样设置__init__.py

from .module1 import Class11, Class12
from .module2 import Class21, function21

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM