Вы не импортируете модуль tools
, он доступен только при импорте пакета, как вы делаете:
import mymod
У вас будет доступ ко всему, что определено в файле __init__
ивсе модули этого пакета:
import mymod
# Reference a module
mymod.tools
# Reference a member of a module
mymod.tools.foo
# And any other modules from this package
mymod.tools.subtools.func
Когда вы импортируете foo
из __init__
, вы просто делаете foo
доступным там, как если бы вы его определили, но, конечно, вы определилиэто в tools
, который является способом организации вашего пакета, так что теперь, так как вы импортировали его в __init__
, вы можете:
import mymod
mymod.foo()
Или вы можете импортировать только foo
:
from mymod import foo
foo()
Но вы можете импортировать foo
, не делая его доступным внутри __init__
, вы можете сделать следующее, точно такое же, как в примере выше:
from mymod.tools import foo
foo()
Вы можете использовать оба подхода,они оба правы, во всех этих примерах вы не «загромождаете файл», поскольку вы можете видеть, что доступ к foo
с использованием mymod.tools.foo
имеет пространство имен, так что вы можете иметь несколько foo
, определенных в других модулях.