Когда скрипт Python должен быть разбит на несколько файлов / модулей? - PullRequest
18 голосов
/ 20 января 2011

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

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

Ответы [ 4 ]

15 голосов
/ 20 января 2011

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

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

3 голосов
/ 20 января 2011

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

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

РЕДАКТИРОВАТЬ: Кроме того, мне пришёл более циничный ответ: если вы можете решить проблему действительно очень уродливым способом, спрячьте уродство в модуле. :)

2 голосов
/ 20 января 2011

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

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

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

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

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

0 голосов
/ 20 января 2011

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

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

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

...