【问题标题】:How does a Python module that contains class of same name work when imported?导入时包含同名类的 Python 模块如何工作?
【发布时间】:2016-10-26 02:14:12
【问题描述】:

我最近一直在使用 web.py 在 Python 中编写一些简单的 Web 应用程序。我以为我了解 import 语句、包和模块的工作原理,但现在我有点困惑。

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

之类的例子
import web
app = web.application(urls, globals())

让我困惑的是我如何使用web.application 创建application 类的实例。如果存在一个类application,它 web 包中名为application 的模块中,根据我所了解到的,我希望必须这样做:

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

包 -> 模块 -> 类

有人可以解决我的困惑吗?这是我引用的 web.py API 的链接http://webpy.org/docs/0.3/api#web.application

提前感谢您的帮助!

【问题讨论】:

  • 希望this有帮助

标签: python python-2.7 web.py


【解决方案1】:

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__

【讨论】:

  • 啊,所以我可以通过导入web 方便地使用application 类,而不必担心在这种情况下application 模块本身?
  • 但是我将如何导入application 模块呢?如果我尝试import web -> app = web.application.application() 之类的方法,我会收到一条错误消息,指出application 类中没有属性application。如果我说import web.application,则仍然加载类而不是模块。
  • 您无法再访问application 模块
  • 在这种情况下实际上可以访问模块。根据packages docswhen using syntax like import item.subitem.subsubitem, each item except for the last must be a package; the last item can be a module or a package but can’t be a class or function or variable defined in the previous item.,所以使用import web.application as application会导入一个应用模块
  • @Moses Koledoye 您引用的文档提到__all____init__.py 中定义的列表。为什么您的回复说__all__ 是在application.py 中定义的?这是一个错误还是您实际上可以这样做(即,如果您在application.py 中定义__all__,那么如果在其他地方您有from application import *,则您在__all__ 中定义的名称在application.py 中——例如作为application 类——被导出到命名空间)?
猜你喜欢
  • 2012-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 2017-02-26
  • 1970-01-01
相关资源
最近更新 更多