包含同名 class 的 Python 模块在导入时如何工作?

How does a Python module that contains class of same name work when imported?

我最近在 Python 中使用 web.py 进行一些简单的 Web 应用程序。我以为我理解导入语句、包和模块是如何工作的,但现在我有点困惑。

根据 web.py 的 API,它说 class application 位于模块 web.application 内。为了使用这个class,教程给出了例子

import web
app = web.application(urls, globals())

让我感到困惑的是我如何使用 web.application 创建 application class 的实例。如果存在一个 class application 里面 一个名为 application 的模块在 web 包中,根据我所学到的,我希望有做这样的事情:

web.application.application(urls, globals())

包 -> 模块 -> class

有人可以解开我的困惑吗?这是 link 到 web.py API 我正在引用 http://webpy.org/docs/0.3/api#web.application

在此先感谢您的帮助!

application.py 模块的属性已导入 web 包的 __init__.py(通过 __all__)。

web 包的 __init__.py 中,您有:

from application import * # referring to application.py

application.py中:

__all__ = [
    "application", "auto_application",
    "subdir_application", "subdomain_application", 
    "loadhook", "unloadhook",
    "autodelegate"
]

因此,在 application.py 中找到的 __all__ 中指定的属性现在可以直接从顶级导入访问 -- web.

您可以 read more 关于 packages__init__.py__all__