我只是滥用Python的导入系统还是可以的?

时间:2011-05-08 21:38:16

标签: python twisted import

我正在使用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()等,而不必写< / p>

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()等吗?

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

3 个答案:

答案 0 :(得分:3)

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

import javascript
Javascript = javascript.Javascript

... Javascriptresources.javascript.Javascript同时提供resources.Javascript。这是有意的吗?当我反省模块时,我总觉得很烦人。

答案 1 :(得分:2)

这被认为是可以接受的用法,因为你在资源,页面等之间保持清晰的分离。当你将所有东西扔进一个大锅里时,它们都变成了渣。

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

答案 2 :(得分:1)

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

from javascript import Javascript
from images import Images

这意味着您仍然可以在客户端代码中执行此操作:

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

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