Организация классов Python в модулях и/или пакетах
Мне нравится соглашение Java о наличии одного открытого класса для каждого файла, даже если иногда есть веские причины помещать более одного публичного класса в один файл. В моем случае у меня есть альтернативные реализации одного и того же интерфейса. Но если бы я поместил их в отдельные файлы, у меня были бы избыточные имена в операторах импорта (или вводящие в заблуждение имена модулей):
import someConverter.SomeConverter
тогда как someConverter
будет именем файла (и модуля) и someConverter
именем класса. Это выглядит довольно нелестно для меня. Чтобы поместить все альтернативные классы в один файл, вы получите более значимый оператор импорта:
import converters.SomeConverter
Но я боюсь, что файлы станут довольно большими, если я поместил все связанные классы в один файл модуля. Что такое лучшая практика Python? Является ли один класс для каждого файла необычным?
Ответы
Ответ 1
Многие из них - личные предпочтения. Используя модули python, у вас есть возможность сохранить каждый класс в отдельном файле и по-прежнему разрешать import converters.SomeConverter
(или from converters import SomeConverter
)
Структура вашего файла может выглядеть примерно так:
* converters
- __init__.py
- baseconverter.py
- someconverter.py
- otherconverter.py
а затем в файле __init__.py
:
from baseconverter import BaseConverter
from otherconverter import OtherConverter
Ответ 2
Решение Zach разбивается на Python 3. Вот фиксированное решение.
Многие из них - личные предпочтения. Используя модули python, у вас есть возможность сохранить каждый класс в отдельном файле и по-прежнему разрешать import converters.SomeConverter
(или from converters import SomeConverter
)
Структура вашего файла может выглядеть примерно так:
* converters
- __init__.py
- baseconverter.py
- someconverter.py
- otherconverter.py
а затем в файле __init__.py
:
from converters.baseconverter import BaseConverter
from converters.otherconverter import OtherConverter