Когда должен быть разбит Python script на несколько файлов/модулей?
В Java этот вопрос прост (если немного утомительно) - для каждого класса требуется собственный файл. Таким образом, количество файлов .java в проекте - это количество классов (не считая анонимных/вложенных классов).
В Python, тем не менее, я могу определить несколько классов в одном файле, и я не совсем уверен, как найти точку, в которой я раскол. Кажется неправильным сделать файл для каждого класса, но он также чувствует себя не так, просто по умолчанию оставить все в одном файле. Как узнать, где разбить программу?
Ответы
Ответ 1
Помните, что в Python файл представляет собой модуль, который, скорее всего, будет импортирован для использования классов, содержащихся в нем. Также помните один из основных принципов разработки программного обеспечения " единица упаковки является единицей повторного использования", что в основном означает:
Если классы наиболее вероятно используются вместе или если один класс приводит к использованию другого, они относятся к общему пакету.
Ответ 2
В Java... для каждого класса требуется собственный файл.
В обратном случае иногда файл Java также включает перечисления или подклассы или интерфейсы в основном классе, потому что они "тесно связаны".
не считая анонимных/вложенных классов
Анонимные классы не должны учитываться, но я считаю, что со вкусом использование вложенных классов - это выбор, похожий на тот, который вы спрашиваете о Python.
(Иногда файл Java имеет два класса, а не вложенные, что разрешено, но yuck этого не делает.)
Ответ 3
Как я вижу, это действительно вопрос о повторном использовании и абстракции. Если у вас есть проблема, которую вы можете решить очень простым способом, чтобы полученный код был полезен во многих других программах, поместите его в свой собственный модуль.
Например: некоторое время назад я написал (плохой) клиент mpd. Я хотел легко сделать конфигурационный файл и парсинг параметров, поэтому я создал класс, который сочетал функции ConfigParser и optparse таким образом, каким я считал разумным. Ему понадобилось несколько классов поддержки, поэтому я собрал их все вместе в модуле. Я никогда не использую клиента, но я повторно использовал модуль конфигурации в других проектах.
EDIT: Кроме того, мне пришло более циничное решение: если вы можете решить проблему очень уродливо, спрячьте уродство в модуле.:)
Ответ 4
Python на самом деле дает вам возможность упаковать ваш код так, как вы считаете нужным.
Аналогия между Python и Java заключается в том, что файл, то есть файл .py в Python
эквивалентно пакету на Java, поскольку в нем может быть много связанных классов и функций.
В качестве хороших примеров ознакомьтесь с встроенными модулями Python.
Просто скачайте источник и проверьте их, основное правило, которым я придерживаюсь, - это
когда у вас очень тесно связанные классы или функции, вы держите их в одном файле
иначе вы их разложите.