Я пытаюсь организовать некоторые модули для собственного использования. У меня примерно так:
lib/
__init__.py
settings.py
foo/
__init__.py
someobject.py
bar/
__init__.py
somethingelse.py
В lib/__init__.py
, я хочу определить некоторые классы, которые будут использоваться, если я импортирую lib. Однако я не могу понять это, не разделив классы на файлы и не импортируя их в __init__.py
.
Вместо того, чтобы сказать:
lib/
__init__.py
settings.py
helperclass.py
foo/
__init__.py
someobject.py
bar/
__init__.py
somethingelse.py
from lib.settings import Values
from lib.helperclass import Helper
Я хочу что-то вроде этого:
lib/
__init__.py #Helper defined in this file
settings.py
foo/
__init__.py
someobject.py
bar/
__init__.py
somethingelse.py
from lib.settings import Values
from lib import Helper
Возможно ли это, или мне нужно разделить класс в другой файл?
РЕДАКТИРОВАТЬ
Хорошо, если я импортирую lib из другого скрипта, я могу получить доступ к классу Helper. Как я могу получить доступ к классу Helper из settings.py?
Пример здесь описывает внутрипакетные ссылки. Цитирую «субмодули часто должны ссылаться друг на друга». В моем случае lib.settings.py нужен Helper, а lib.foo.someobject нужен доступ к Helper, так где мне определить класс Helper?
Ответы:
'
lib/
«S родительский каталог должен бытьsys.path
.Ваш '
lib/__init__.py
' может выглядеть так:Тогда должен работать следующий пример:
Ответ на отредактированный вариант вопроса:
__init__.py
определяет, как ваш пакет выглядит снаружи. Если вам нужно использоватьHelper
in,settings.py
определитеHelper
в другом файле, например, 'lib/helper.py
'.Команда:
Вывод:
источник
Если
lib/__init__.py
определяет класс Helper, то в settings.py вы можете использовать:Это работает, потому что. является текущим каталогом и действует как синоним пакета lib с точки зрения модуля настроек. Обратите внимание, что нет необходимости экспортировать Helper через
__all__
.(Подтверждено с помощью python 2.7.10, работающего в Windows.)
источник
Вы просто помещаете их в __init__.py.
Итак, с test / classes.py:
... и test / __ init__.py:
Вы можете импортировать тест и получить доступ к A, B и Helper
источник
Добавьте что-то подобное в
lib/__init__.py
from .helperclass import Helper
теперь вы можете импортировать его напрямую:
from lib import Helper
источник
Изменить, так как я неправильно понял вопрос:
Просто введите
Helper
класс__init__.py
. Совершенно питонический. Это просто странно на таких языках, как Java.источник
Да, это возможно. Вы также можете определить
__all__
в__init__.py
файлах. Это список модулей, которые будут импортированы, когда выисточник
Может, это сработает:
источник