Регистраторы не являются сериализуемыми, таким образом, необходимо использовать переходный процесс при хранении их в полях экземпляра. Если Вы хотите восстановить регистратор после десериализации, можно сохранить Уровень (Строка), сочиняют объект, который действительно становится сериализированным.
Вот несколько возможных причин:
Пример примерно эквивалентной функциональности: Java's log4j => пара десятков файлов, ~ 8000 SLOC. Ведение журнала Python => 3 файла, ~ 2800 SLOC.
В Python класс также можно использовать для небольших задач (только для группировки и т. Д.). поддержание отношения 1: 1 приведет к тому, что будет слишком много файлов с небольшой или небольшой функциональностью.
Для этого нет специального соглашения - делайте то, что делает ваш код наиболее читаемым и поддерживаемым.
Есть мантра «плоский лучше, чем вложенный», который обычно препятствует чрезмерному использованию иерархии. Я не уверен, что существуют какие-либо жесткие правила относительно того, когда вы хотите создать новый модуль - по большей части люди просто используют свое усмотрение для группировки логически связанных функций (классов и функций, которые относятся к конкретной проблемной области) .
Хорошая ветка из списка рассылки Python , и цитата Фредрика Лунда:
еще важнее то, что в Python, вы не используете классы для всех - вещь; если тебе нужны фабрики, синглтоны, несколько способов создания объекты, полиморфные помощники и т. д., вы используйте простые функции, а не классы или статические методы.
после того, как вы преодолеете все классы ", используйте модули для организации вещи таким образом, чтобы код, который использует ваши компоненты.
сделайте так, чтобы операторы импорта выглядели хорошо.
в книге Эксперт по программированию на Python есть кое-что связанное с обсуждением
Глава 4: Выбор подходящих имен: «Построение дерева пространства имен» и «Разделение кода»
Грубое резюме моей строки: собрать некоторый связанный класс в один модуль (исходный файл) и
собрать некоторые связанные модули в один пакет, полезно для поддержки кода.
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.