我正在使用Twisted构建一个Web应用程序,对于站点资源,我有一个这样的结构:
/resources
__init__.py
file.py
javascript.py
images.py
wsdl.py
/pages
__init__.py
page.py
static.py
login.py
...etc...
其中file.py
和page.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()
等吗?
如果这适用于站点资源,因为每个文件都包含一个充当该资源的类,那么在其他地方采用以避免长串导入是不合适的,还是只会导致头痛呢?
答案 0 :(得分:3)
我同意Ignacio。我还要指出进行导入然后像你一样进行分配:
import javascript
Javascript = javascript.Javascript
... Javascript
和resources.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
中导入各种定义以使它们直接通过导入库/子包名称空间可用时没有任何错误。这是一个很常见的习语,我经常使用它。