【问题标题】:Am I just abusing Python's import system or is this okay?我只是在滥用 Python 的导入系统还是可以?
【发布时间】:2011-05-08 21:38:15
【问题描述】:

我正在使用 Twisted 构建一个 Web 应用程序,对于网站资源,我有这样的结构:

/resources
    __init__.py
    file.py
    javascript.py
    images.py
    wsdl.py
/pages
    __init__.py
    page.py
    static.py
    login.py
    ...etc...

其中file.pypage.py 包含具有通用功能的父类(例如,分别是文件路径验证和会话/模板)。每个其他脚本都包含一个类,它是一个单一的扭曲资源。我的__init__.py 文件如下所示:

import javascript
Javascript = javascript.Javascript

import images
Images = images.Images

...

这样,在主脚本中,在将执行权交给twisted之前,我可以只使用import resources; import pages,然后只引用resources.Javascript()pages.Login()等,而不必编写

from resources.javascript import Javascript
from resources.images import Images
from resources.wsdl import WSDL
from pages.static import Static
from pages.login import Login
...

然后使用这些类中的每一个来构建站点结构。它很快就会变得不守规矩。

请注意,我不会抱着“我永远是这个项目的唯一开发者,所以没关系”的心态来解决这个问题。

那么这是对导入系统的不人道滥用吗?我是不是应该先扣上from pages import *再用pages.Static()pages.Login()等等?

如果这适用于站点资源,因为每个文件都包含一个充当该资源的类,那么在其他地方采用以避免长字符串导入是否不合适,还是只会导致头痛?

【问题讨论】:

    标签: python twisted import


    【解决方案1】:

    我同意Ignacio。我还要指出,像您一样进行导入然后分配:

    import javascript
    Javascript = javascript.Javascript
    

    ...使Javascript 可作为resources.javascript.Javascriptresources.Javascript 使用。这是故意的吗?当我自省一个模块时,我总是觉得这很烦人。

    【讨论】:

      【解决方案2】:

      这被认为是可以接受的用法,因为您在资源、页面等之间保持干净的分离。当您将所有东西扔进一个大锅时,一切都会变成渣滓。

      但请考虑在__init__.py 中使用绝对导入(例如from resources.javascript import Javascript),以避免将来出现问题。

      【讨论】:

        【解决方案3】:

        你有什么不想用的理由吗(在resources/__init__.py):

        from javascript import Javascript
        from images import Images
        

        这意味着在客户端代码中您仍然可以这样做:

        import resources
        js = resources.Javascript()
        imgs = resources.Images()
        

        在任何一种情况下,我认为在__init__.py 中导入各种定义以通过导入库/子包命名空间直接使用它们没有任何问题。这是一个很常见的成语,我经常使用它。

        【讨论】:

        • 是的,不知道为什么我没有发生这种情况
        猜你喜欢
        • 2011-05-18
        • 2019-08-18
        • 2010-12-05
        • 2021-10-26
        • 2016-02-07
        • 2018-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多