Предоставление классов внутри модулей внутри пакета Python непосредственно в пространстве имен пакета - PullRequest
12 голосов
/ 11 апреля 2010

У меня есть приложение wxPython с различными классами графического интерфейса в их собственных модулях в пакете под названием gui. При такой настройке импорт главного окна будет выполняться следующим образом:

from gui.mainwindow import MainWindow

Мне это показалось беспорядочным, поэтому я изменил файл <code>__init__.py для пакета gui, чтобы импортировать класс непосредственно в пространство имен пакета:

from mainwindow import MainWindow

Это позволяет мне импортировать главное окно следующим образом:

from gui import MainWindow

Это выглядит лучше для меня эстетически, и я думаю, что это также более близко отражает то, что я делаю (импортирую класс MainWindow из gui "пространства имен"). Причина, по которой я сделал пакет gui, заключалась в том, чтобы собрать все графические элементы вместе. Я мог бы так же легко сделать один модуль gui и вставить в него все классы GUI, но я думаю, что это было бы неуправляемо. Теперь пакет работает как модуль, но позволяет разделить классы на их собственные модули (вместе с вспомогательными функциями и т. Д.).

Все это кажется мне несколько мелочным, я просто подумал, что брошу это туда, чтобы посмотреть, что другие думают об этой идее.

1 Ответ

5 голосов
/ 11 апреля 2010

Ну, это довольно распространенная модель, и я думаю, что это также причина, по которой вы можете включать вещи в __init__.py файлы.
В качестве подтверждения просто используйте grep для операторов импорта в __init__.py файлах, и вы увидите, что он широко используется как в стандартной библиотеке, так и в общих пакетах.

...