Упрощение дерева модулей python

#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.html

2. Присвоение имен модулям в PascalCase, вероятно, является плохой идеей, особенно если это приводит к тому, что они разделяют имя со своим классом

3. @jonrsharpe, это хороший способ, спасибо. Однако на самом деле это не меняет структуру дерева. Это просто создает ярлык. Все __repr__ LoadTXT равно вернется mymodule.LoadTXT.LoadTXT .

4. И почему это имеет значение? Напишите лучшее представление, если хотите.

5. Но вам не нужно «импортировать такие имена» , это именно то, что я хочу сказать. Это упрощает для пользователей, они просто делают from mymodule import LoadTXT .