Подтвердить что ты не робот

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

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

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

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

Это в Python?

4b9b3361

Ответ 1

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

Ответ 2

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

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

from whatever import SomeClass

Ответ 3

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

Ответ 4

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

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

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

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

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

Ответ 5

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

Ответ 6

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

manyClass.py

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

class tryme():
   print 'try me'

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

из многопроцессорной импортной попытки

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