Я просто злоупотребляю системой импорта Python или это нормально? - PullRequest
3 голосов
/ 09 мая 2011

Я создаю веб-приложение с Twisted, и для ресурсов сайта у меня есть такая структура:

/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 содержат родительские классы с общей функциональностью (filepathвалидация и сессии / шаблоны соответственно, например).Каждый другой скрипт содержит один класс, который представляет собой единый витой ресурс.мои __init__.py файлы выглядят так:

import javascript
Javascript = javascript.Javascript

import images
Images = images.Images

...

, так что в основном скрипте перед передачей исполнения витой я могу просто 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() и т. Д.

Если это подходит для ресурсов сайта, поскольку каждый файл содержит один класс, выступающий в качестве этого ресурса, будет ли оннеуместно ли его принимать в другом месте, чтобы избежать длинных строк импорта, или это просто приведет к головным болям?

Ответы [ 3 ]

3 голосов
/ 09 мая 2011

Я согласен с Игнасио . Я также хотел бы отметить, что выполнение импорта, а затем присваивание, как вы делаете:

import javascript
Javascript = javascript.Javascript

... делает Javascript доступным как resources.javascript.Javascript, так и resources.Javascript. Это предназначено? Меня всегда раздражает, когда я анализирую модуль.

2 голосов
/ 09 мая 2011

Это считается приемлемым использованием, так как вы поддерживаете чистое разделение между ресурсами, страницами и т. Д. Когда вы выбрасываете все в один большой горшок, все это превращается в шлак.

Но подумайтеиспользуя абсолютный импорт (например, from resources.javascript import Javascript) в __init__.py, чтобы избежать будущих проблем.

1 голос
/ 09 мая 2011

Есть ли причина, по которой вы не хотите использовать (в resources/__init__.py):

from javascript import Javascript
from images import Images

Это будет означать, что в коде клиента вы можете сделать:

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

В любом случае, я не думаю, что есть что-то неправильное в импорте различных определений в __init__.py, чтобы сделать их доступными напрямую через импорт пространства имен библиотеки / подпакета. Это достаточно распространенная идиома, и я часто ее использую.

...