Подтвердить что ты не робот

Организация моего проекта Python

Я начинаю проект Python и ожидаю, что у него будет 20 или более классов. Как хорошая практика, я хочу поместить их в отдельный файл каждый. Тем не менее, каталог проекта быстро заваливается файлами (или будет, когда я это сделаю).

Если я поместил файл для импорта в папку, я больше не могу его импортировать. Как импортировать файл из другой папки и мне нужно будет ссылаться на класс, который он содержит по-другому, теперь, когда он находится в папке?

Заранее спасибо

4b9b3361

Ответ 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