Должен ли я создавать каждый класс в своем .py файле?
Я новичок в Python в целом.
Я знаю, что я могу создать несколько классов в одном файле .py, но мне интересно, должен ли я создавать каждый класс в своем собственном .py файле.
В С#, например, у меня будет класс, который обрабатывает все взаимодействия с базами данных. Затем еще один класс, который имел деловые правила.
Это в Python?
Ответы
Ответ 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'
Теперь введите это в оболочку интерпретатора...
из многопроцессорной импортной попытки
куча трудоемкой работы
попробуй меня