Должен ли я создавать каждый класс в своем .py-файле?

Я совершенно новичок в Python в целом.

Я знаю, что я могу создать несколько классов в одном файле .py, но мне интересно, должен ли я создавать каждый класс в своем .py-файле.

В C #, например, у меня будет класс, который обрабатывает все взаимодействия с базами данных. Затем еще один класс, который имел деловые правила.

Это в Python?

6 Solutions collect form web for “Должен ли я создавать каждый класс в своем .py-файле?”

Типичный стиль Python состоит в том, чтобы поместить связанные классы в один и тот же модуль. Возможно, что класс попадает в собственный модуль (особенно если это большой класс), но он не должен быть целью в своем собственном праве. И когда вы это сделаете, пожалуйста, не называйте модуль после класса – вы просто закончите сбивать с толку себя и других, о которых и что.

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

Каждый класс в .py-файле просто создает эпическое раздувание в вашей таблице модулей, поскольку, если вас интересует только один класс, вы все равно можете

from whatever import SomeClass 

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

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

Если у вас есть класс Foo, поместите его в файл Foo.py со следующими разделами:

  1. импорт
    • Это то, где вы тянете зависимости.
    • Примеры: import math , from Bar import *
  2. Глобалы
    • Здесь вы определяете внешний интерфейс вашего модуля, который является всеми символами, которые видны вне этого модуля.
    • Пример: __all__ = ['Foo']
    • Здесь также можно определить глобальные переменные (плохие) и глобальные константы (хорошие). Эти глобалы не нужно экспортировать; их можно сделать глобальными просто для упрощения кода.
    • Пример: PI = 3.14159 означает, что вы можете написать PI , тогда как если бы вы определили его внутри класса Foo, вам нужно было бы написать Foo.PI
  3. функции
    • Здесь вы определяете все функции верхнего уровня, которые относятся к классу Foo, но не относятся к пространству имен класса Foo. Это, вероятно, редко, поскольку классы допускают как @staticmethods и внутренние классы.
    • Пример: def print_foo(foo): print(foo)
  4. Классы
    • Пример: class Foo(object): pass

Иногда вам нужно разместить более одного класса в одном модуле. Вы должны делать это, когда два или более классов концептуально связаны с точкой, где вы почти всегда будете использовать их вместе и никогда самостоятельно. Это исключение, а не норма. В этом случае добавьте все имена классов в __all__ global.

Наконец, для каждого модуля Foo.py должен быть соответствующий модульный тестовый модуль, называемый testFoo.py.

Возможно нет. Файлы Python являются «модулями». Модули должны содержать только тот код, который может быть повторно использован повторно. Если это включает в себя несколько классов, что является нормой, то это нормально.

Да каждый класс в собственном файле. Импорт даже одного класса (или функции) в файл с несколькими классами приводит к тому, что python выполняет определение всех классов в файле. Попробуй это:

manyClass.py

 class foo(): print 'a bunch of time consuming work' class tryme(): print 'try me' 

Теперь введите это в оболочку интерпретатора …

из многих попыток импорта Classes

куча трудоемкой работы
Попробуй меня

  • Как подсчитать строки комментариев и пустые строки исходного кода Java с помощью Python?
  • Переключение списка из текстового файла в список python
  • Почему я не могу использовать печать, если тройной оператор в python?
  • Как я могу убедиться, что пользователь вводит только «y» или «n» в программу?
  • Каков самый быстрый способ проверить, имеет ли класс определенную функцию?
  • Я не могу полностью выполнить функцию
  • Генераторы в стиле Python в Go
  • Есть ли ограничение на количество асинхронных вызовов urlfetch, которые я могу запустить одновременно?
  • Python - лучший язык программирования в мире.