Лучший способ сохранить организованные модули Python - PullRequest
0 голосов
/ 29 августа 2018

Я использую Python для работы в Maya, и за несколько месяцев я начал создавать множество различных модулей, которые формируют различные инструменты.

Изначально я просто складывал все внутри одного корневого пакета, состоящего из огромных модулей, содержащих немного функций, классов и т. Д., В зависимости от ситуации, с отдельным модулем «ядро», содержащим все общие элементы.

root (package)
    animation.py  (module)
    audio.py      (module)
    modelling.py  (module)
    rigging.py    (module)
    library.py    (module)
    core.py       (module)

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

root (package)
    animation (package)
        __init__.py  (module)
        core.py      (module)
        utils.py     (module)
        ui.py        (module
        bar.py       (module)

    audio (package)
        __init__.py  (module)
        core.py      (module)
        utils.py     (module)
        ui.py        (module
        foo.py       (module)

   rigging (package)
        __init__.py  (module)
        core.py      (module)
        utils.py     (module)
        ui.py        (module
        foo.py       (module)

   etc

Внутри модулей __ init __. Py остальные модули импортируются таким образом.

from core import *
from utils import *
from ui import Window
from foo import Foo

Так что, когда весь пакет импортируется, результат очень похож на то, что все внутри одного огромного модуля, который содержит все. В конце концов, для доступа к функциям каждого модуля / пакета этот код должен работать для обеих структур.

import animation
animation.Foo()

Мой вопрос:

Какой из этих методов более логичен для организации кода? С одной стороны, структура "пакета" выглядит лучше организованной, но она дает мне больше циклического импорта и проблем с перезагрузкой (это может быть просто признаком моих плохих импортных привычек). С другой стороны, из-за количества вещей, которые я в них помещаю, навигация по классическим модулям становится довольно сложной.

1 Ответ

0 голосов
/ 29 августа 2018

Прежде всего, добро пожаловать в StackOverflow! Во-вторых, это определенно вопрос предпочтений, но вам следует избегать синтаксиса from package import *, поскольку он сильно загрязняет пространство имен, особенно если у вас много функций.

По поводу вашего вопроса, если вы посмотрите на многие стандартные библиотечные пакеты в Python, они состоят из корневой папки с примерно 5-6 файлами py. Теперь это, возможно, не самая красивая вещь, которую можно сделать, но она не дезорганизована и позволяет легко импортировать.

В вашей ситуации, поскольку у вас есть много файлов для рассмотрения, вы должны сначала подумать: «Являются ли мои файлы Python слишком маленькими?» Исходя из Java-опыта, я понимаю, что нужно создавать множество файлов, каждый из которых содержит небольшой кусочек. Попытайтесь поместить подобные вещи в похожие вещи так, чтобы это имело смысл, не имея слишком много файлов.

Если все эти модули связаны каким-то основным приложением, вам следует постараться максимально разделить модули, поэтому вам необходимо импортировать как можно меньше вещей из каждого модуля. Если вы пишете библиотеку, вы должны на 100% постараться сделать модули как можно более автономными, если только вы не планируете поставлять ее как одну большую библиотеку. При доставке в виде одной библиотеки вы можете организовать ее так, как хотите, если она имеет смысл и работает.

В основном:

  • Создайте подмодуль для каждого, и вы получите красивость и организацию, но импортируете ад
  • Имеет 5-6 больших файлов, и импортировать легко, но файлы требуют времени для навигации и поиска того, что вам нужно использовать / изменить
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...