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

Когда должен быть разбит Python script на несколько файлов/модулей?

В Java этот вопрос прост (если немного утомительно) - для каждого класса требуется собственный файл. Таким образом, количество файлов .java в проекте - это количество классов (не считая анонимных/вложенных классов).

В Python, тем не менее, я могу определить несколько классов в одном файле, и я не совсем уверен, как найти точку, в которой я раскол. Кажется неправильным сделать файл для каждого класса, но он также чувствует себя не так, просто по умолчанию оставить все в одном файле. Как узнать, где разбить программу?

4b9b3361

Ответ 1

Помните, что в Python файл представляет собой модуль, который, скорее всего, будет импортирован для использования классов, содержащихся в нем. Также помните один из основных принципов разработки программного обеспечения " единица упаковки является единицей повторного использования", что в основном означает:

Если классы наиболее вероятно используются вместе или если один класс приводит к использованию другого, они относятся к общему пакету.

Ответ 2

В Java... для каждого класса требуется собственный файл.

В обратном случае иногда файл Java также включает перечисления или подклассы или интерфейсы в основном классе, потому что они "тесно связаны".

не считая анонимных/вложенных классов

Анонимные классы не должны учитываться, но я считаю, что со вкусом использование вложенных классов - это выбор, похожий на тот, который вы спрашиваете о Python.

(Иногда файл Java имеет два класса, а не вложенные, что разрешено, но yuck этого не делает.)

Ответ 3

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

Например: некоторое время назад я написал (плохой) клиент mpd. Я хотел легко сделать конфигурационный файл и парсинг параметров, поэтому я создал класс, который сочетал функции ConfigParser и optparse таким образом, каким я считал разумным. Ему понадобилось несколько классов поддержки, поэтому я собрал их все вместе в модуле. Я никогда не использую клиента, но я повторно использовал модуль конфигурации в других проектах.

EDIT: Кроме того, мне пришло более циничное решение: если вы можете решить проблему очень уродливо, спрячьте уродство в модуле.:)

Ответ 4

Python на самом деле дает вам возможность упаковать ваш код так, как вы считаете нужным.

Аналогия между Python и Java заключается в том, что файл, то есть файл .py в Python эквивалентно пакету на Java, поскольку в нем может быть много связанных классов и функций.

В качестве хороших примеров ознакомьтесь с встроенными модулями Python. Просто скачайте источник и проверьте их, основное правило, которым я придерживаюсь, - это когда у вас очень тесно связанные классы или функции, вы держите их в одном файле иначе вы их разложите.