#python #structure #python-module
#python #структура #python-модуль
Вопрос:
Я пытался найти ответ на этот вопрос, но безуспешно.
Как я могу сохранить простое дерево модулей (модуль, подмодуль и т.д.) При разделении кода на несколько файлов?
Точнее, если я помещу непосредственно в свой основной класс Load
__init__.py
, к нему можно будет удобно получить доступ mymodule.Load
и создать экземпляр mymodule.Load()
. У меня также могут быть дочерние классы, такие как LoadTXT
, также в __init__.py
, которые легко создаются с mymodule.LoadTXT()
помощью .
Теперь, если эти классы большие, и я хочу разделить их на несколько файлов, у меня есть следующий вариант:
mymodule/
__init__.py # empty
Load.py # contains class Load
LoadTXT.py # contains class LoadTXT and imports class Load
но это означает, что я должен использовать mymodule.LoadTXT.LoadTXT()
для создания экземпляра LoadTXT
, что является громоздким и уродливым.
Я думал об использовании execfile
or exec
вместо этого, но это звучит не очень по-питоновски и выглядит некрасиво.
Обратите внимание, что я привел довольно простой пример, но в моей реальной ситуации мне понадобилось бы несколько папок (подмодулей), каждая из которых имеет одну и ту же проблему. Тогда дерево действительно становится беспорядочным.
Комментарии:
1. Только
from LoadTXT import LoadTXT
в вашем__init__.py
. Затем он доступен из модуля. Читать docs.python.org/3/tutorial/modules.html2. Присвоение имен модулям в PascalCase, вероятно, является плохой идеей, особенно если это приводит к тому, что они разделяют имя со своим классом
3. @jonrsharpe, это хороший способ, спасибо. Однако на самом деле это не меняет структуру дерева. Это просто создает ярлык. Все
__repr__
LoadTXT
равно вернетсяmymodule.LoadTXT.LoadTXT
.4. И почему это имеет значение? Напишите лучшее представление, если хотите.
5. Но вам не нужно «импортировать такие имена» , это именно то, что я хочу сказать. Это упрощает для пользователей, они просто делают
from mymodule import LoadTXT
.