Я не соглашусь с остальными и скажу да.Для меня, я имел больший успех, помещая каждый класс в свой собственный файл (модуль).Но есть исключения, поэтому позвольте мне объяснить на примере.
Если у вас есть класс Foo, поместите его в файл с именем Foo.py со следующими разделами:
- Imports
- . Здесь вы извлекаете зависимости.
- Примеры:
import math
, from Bar import *
- Globals
- ThisЗдесь вы определяете внешний интерфейс вашего модуля, который представляет собой все символы, которые видны за пределами этого модуля.
- Пример:
__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 должен быть соответствующий модуль модульного тестирования с именем testFoo.py.