Несколько классов в единственном файле рекомендованы? [дубликат]

Регистраторы не являются сериализуемыми, таким образом, необходимо использовать переходный процесс при хранении их в полях экземпляра. Если Вы хотите восстановить регистратор после десериализации, можно сохранить Уровень (Строка), сочиняют объект, который действительно становится сериализированным.

53
задан martineau 17 December 2017 в 15:42
поделиться

6 ответов

Вот несколько возможных причин:

  1. Python не основан исключительно на классах - естественной единицей декомпозиции кода в Python является модуль. Модули могут содержать функции (которые в Python являются первоклассными объектами) с такой же вероятностью, как и классы. В Java единицей декомпозиции является класс. Следовательно, Python имеет один модуль = один файл, а Java - один (общедоступный) класс = один файл.
  2. Python намного более выразителен, чем Java, и если вы ограничитесь одним классом на файл (что Python не помешает вам от выполнения) вы получите множество очень маленьких файлов - больше, чтобы отслеживать с очень небольшой пользой.

Пример примерно эквивалентной функциональности: Java's log4j => пара десятков файлов, ~ 8000 SLOC. Ведение журнала Python => 3 файла, ~ 2800 SLOC.

58
ответ дан 7 November 2019 в 08:42
поделиться

В Python класс также можно использовать для небольших задач (только для группировки и т. Д.). поддержание отношения 1: 1 приведет к тому, что будет слишком много файлов с небольшой или небольшой функциональностью.

5
ответ дан 7 November 2019 в 08:42
поделиться

Для этого нет специального соглашения - делайте то, что делает ваш код наиболее читаемым и поддерживаемым.

4
ответ дан 7 November 2019 в 08:42
поделиться

Есть мантра «плоский лучше, чем вложенный», который обычно препятствует чрезмерному использованию иерархии. Я не уверен, что существуют какие-либо жесткие правила относительно того, когда вы хотите создать новый модуль - по большей части люди просто используют свое усмотрение для группировки логически связанных функций (классов и функций, которые относятся к конкретной проблемной области) .

Хорошая ветка из списка рассылки Python , и цитата Фредрика Лунда:

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

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

18
ответ дан 7 November 2019 в 08:42
поделиться

в книге Эксперт по программированию на Python есть кое-что связанное с обсуждением
Глава 4: Выбор подходящих имен: «Построение дерева пространства имен» и «Разделение кода»
Грубое резюме моей строки: собрать некоторый связанный класс в один модуль (исходный файл) и собрать некоторые связанные модули в один пакет, полезно для поддержки кода.

6
ответ дан 7 November 2019 в 08:42
поделиться

A good example of not having seperate files for each class might be the models.py file within a django app. Each django app may have a handful of classes that are related to that app, and putting them into individual files just makes more work.

Similarly, having each view in a different file again is likely to be counterproductive.

2
ответ дан 7 November 2019 в 08:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: