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


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

import someConverter.SomeConverter

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

import converters.SomeConverter

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

2 54

2 ответа:

многие из них являются личными предпочтениями. Используя модули python, у вас есть возможность хранить каждый класс в отдельном файле и по-прежнему разрешать import converters.SomeConverter (или from converters import SomeConverter)

ваша файловая структура может выглядеть примерно так:

* converters
     - __init__.py
     - baseconverter.py
     - someconverter.py
     - otherconverter.py

и затем в __init__.py file:

from baseconverter import BaseConverter
from otherconverter import OtherConverter

решение Зака ломается на Python 3. Вот фиксированное решение.

многие из них являются личными предпочтениями. Используя модули python, у вас есть возможность хранить каждый класс в отдельном файле и по-прежнему разрешать import converters.SomeConverter (или from converters import SomeConverter)

ваша файловая структура может выглядеть примерно так:

* converters
     - __init__.py
     - baseconverter.py
     - someconverter.py
     - otherconverter.py

и затем в __init__.py file:

from converters.baseconverter import BaseConverter
from converters.otherconverter import OtherConverter