【问题标题】:Python: Accessing Modules in a Folder using import <module> instead of from <module> import *Python:使用 import <module> 而不是 from <module> import * 访问文件夹中的模块
【发布时间】:2016-01-06 21:49:46
【问题描述】:

我有一个类似于

的嵌套类
/Foo
    __init__.py
    pitythefoo.py
    kungfoo.py
    /Bar
        __init__.py
        spam.py
        eggs.py

我的__init__.py 文件目前有

__all__ = ['pitythefoo', 'kungfoo'] 用于 /Foo/__init__.py 文件和

__all__ = ['spam', 'eggs'] 用于 /Foo/Bar/__init__.py 文件,

所以我可以使用

访问垃圾邮件和鸡蛋
from Foo.Bar import *
spam
eggs

但是,我想使用

访问垃圾邮件和鸡蛋
from Foo import Bar
Bar.spam
Bar.eggs

我可以在我的__init__.py 文件中使用一些代码来进行这种导入吗?

【问题讨论】:

  • 我建议你通读一下,例如docs.python.org/2/tutorial/modules.html
  • @Bryce93:只需在您的__init__.py 中导入名称即可。如果你想使用__all__,答案如下。如果你讨厌明星导入(就像我一样),请明确导入名称
  • 重要提示:如果__all__ 与您获得的所有内容相同,则无需包含它。 Bar/__init__.py 应该包含例如import spamFoo/__init__.py 不应包含任何内容。
  • 另请注意,以第 6.4 节为例,如果您from sound import effects,则访问effects.echo 等,正是您得到的。跨度>

标签: python python-import


【解决方案1】:

您可以通过修改 Foo/Bar/__init__.py 来破解它:

__all__ = ['spam', 'eggs']

from . import *

它有效,但它绝对不优雅。

编辑
正如Andrea Corbellini 在上面的评论中指出的那样,您可以避免星号导入:

from . import spam
from . import eggs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 2011-09-18
    • 1970-01-01
    相关资源
    最近更新 更多