Организация классов Python в модулях и / или пакетах - PullRequest
56 голосов
/ 01 октября 2010

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

import someConverter.SomeConverter

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

import converters.SomeConverter

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

Ответы [ 2 ]

58 голосов
/ 02 октября 2010

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

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

и затем в вашем __init__.py файле:

from baseconverter import BaseConverter
from otherconverter import OtherConverter
41 голосов
/ 07 ноября 2012

Решение Зака ​​ломается на 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...