Я до сих пор не могу сказать, что вы пытаетесь сделать или даже спрашиваете, но это мое лучшее предположение:
Обычно, просто используйте классический импорт.
ЕСЛИ модуль становится слишком большим, или если у вас есть очень веская причина разделять вещи, но вы хотите использовать одно и то же пространство имен, вы можете "поднять" значения в фиктивное пространство имен. Например, если бы я имел widget.Foo
и widget.Bar
и хотел, чтобы они были в разных файлах, но я хотел иметь возможность набирать Foo
и Bar
в каждом файле, я обычно должен был бы from widget import Foo
и from widget import Bar
, Если у вас есть МНОГИЕ из этих файлов (foo.py, bar.py, baz.py, ..., zeta.py), это может стать немного громоздким. Таким образом, вы можете улучшить свою ситуацию, импортировав их только один раз, в widget/__init__.py
, а затем набрав from foo import *, from bar import *, ...
в каждой папке, просто один раз и добавив from widget import *
только один раз в каждом модуле. И все готово! ... ну ... почти ...
Это приводит вас к циклическому сценарию импорта, к которому вы должны быть крайне осторожны: Круговой (или циклический) импорт в Python Это будет хорошо, например, если вы ссылаетесь на Bar
в функции в foo.py
все хорошо, потому что вы не сразу используете значение. Однако, если вы введете x = Bar
в foo.py
, значение может быть еще не определено!
sidenote: Вы можете программно импортировать, используя функцию __import__
. Если вы соедините это с os.walk
, тогда вы можете избежать ввода from ... import *
для каждого файла в папке вашего виджета. Это важный и необходимый шаг, чтобы избежать ошибок в будущем.