Я использую 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()
Мой вопрос:
Какой из этих методов более логичен для организации кода? С одной стороны, структура "пакета" выглядит лучше организованной, но она дает мне больше циклического импорта и проблем с перезагрузкой (это может быть просто признаком моих плохих импортных привычек). С другой стороны, из-за количества вещей, которые я в них помещаю, навигация по классическим модулям становится довольно сложной.