Я пытаюсь понять, что лучше всего относится к механике импорта Python (v2.7). У меня есть проект, который начал немного расти и позволяет сказать, что мой код организован следующим образом:
foo/
__init__.py
Foo.py
module1.py
module2.py
module3.py
Имя пакета foo
, а под ним есть модуль Foo.py
, который содержит код для класса foo
. Поэтому я использую одно и то же имя для пакета, модуля и класса, которые могут быть не очень умными для начала.
__init__.py
пусто и класс foo
должен импортировать module1, module2 and module3
, поэтому часть моего файла Foo.py
выглядит так:
# foo/Foo.py
import module1
import module2
import module3
class Foo(object):
def __init__(self):
....
....
if __name__ == '__main__':
foo_obj = Foo()
Однако позже я повторил это, и я подумал, что было бы лучше иметь весь импорт в файле __init__.py
. Следовательно, мой __init__.py
теперь выглядит следующим образом:
# foo/__init__.py
import Foo
import module1
import module2
import module3
....
....
а мне Foo.py
нужно импортировать foo
:
# foo/Foo.py
import foo
Хотя это выглядит удобно, поскольку это один лайнер, я немного обеспокоен тем, что он может создавать круговые импорт. Я имею в виду, что при запуске script Foo.py
он будет импортировать все, что может, и тогда будет вызываться __init__.py
, который снова импортирует Foo.py
(это правильно?). Кроме того, использование одного и того же имени для пакета, модуля и класса делает вещи более запутанными.
Имеет ли смысл то, как я это сделал? Или я прошу о неприятностях?