Организация моего проекта Python
Я начинаю проект Python и ожидаю, что у него будет 20 или более классов. Как хорошая практика, я хочу поместить их в отдельный файл каждый. Тем не менее, каталог проекта быстро заваливается файлами (или будет, когда я это сделаю).
Если я поместил файл для импорта в папку, я больше не могу его импортировать. Как импортировать файл из другой папки и мне нужно будет ссылаться на класс, который он содержит по-другому, теперь, когда он находится в папке?
Заранее спасибо
Ответы
Ответ 1
Создайте файл __init__.py
в папке своих проектов, и он будет рассматриваться как модуль Python.
Классы в вашем каталоге пакетов могут быть импортированы с использованием следующего синтаксиса:
from package import class
import package.class
В __init__.py
вы можете создать массив __all__
, который определяет поведение from package import *
:
# name1 and name2 will be available in calling module namespace
# when using "from package import *" syntax
__all__ = ['name1', 'name2']
А вот гораздо больше информации, чем вы даже хотите знать о пакетах в Python
Вообще говоря, хороший способ узнать, как организовать много кода, - это выбрать популярный пакет Python и посмотреть, как они это сделали. Я бы проверил Django и Twisted, для начала.
Ответ 2
"Как хорошая практика, я хочу поместить их в отдельный файл каждый".
Это не очень хорошая практика. Вы должны проектировать модули, которые содержат тесно связанные классы.
Как практический вопрос, ни один класс не стоит полностью в одиночестве. Обычно классы входят в кластеры или группы, которые логически связаны между собой.
Ответ 3
Python не заставляет вас встраивать стиль Java в один класс. Фактически, он даже не считал хорошим стилем, чтобы поместить каждый класс в отдельный файл, если они не огромны. (Если они огромны, вам, вероятно, придется делать рефакторинг). Вместо этого вы должны группировать подобные классы и функции в модулях. Например, если вы пишете GUI-калькулятор, ваш макет пакета может выглядеть так:
/amazingcalc
/__init__.py # This makes it a Python package and importable.
/evaluate.py # Contains the code to actually do calculations.
/main.py # Starts the application
/ui.py # Contains the code to make a pretty interface
Ответ 4
простой ответ заключается в создании пустого файла с именем __init__.py
в новой папке, которую вы создали. Затем в ваш файл верхнего уровня .py включите что-то вроде:
import mynewsubfolder.mynewclass