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

Организация классов Python в модулях и/или пакетах

Мне нравится соглашение Java о наличии одного открытого класса для каждого файла, даже если иногда есть веские причины помещать более одного публичного класса в один файл. В моем случае у меня есть альтернативные реализации одного и того же интерфейса. Но если бы я поместил их в отдельные файлы, у меня были бы избыточные имена в операторах импорта (или вводящие в заблуждение имена модулей):

import someConverter.SomeConverter

тогда как someConverter будет именем файла (и модуля) и someConverter именем класса. Это выглядит довольно нелестно для меня. Чтобы поместить все альтернативные классы в один файл, вы получите более значимый оператор импорта:

import converters.SomeConverter

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

4b9b3361

Ответ 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