Moduł Pythona i zamieszanie przy ładowaniu pakietów
Powiedzmy, że mam coś takiego:
. ├── run.py └── test ├── __init__.py ├── models │ ├── foo │ │ ├── baby.py │ │ └── __init__.py │ ├── __init__.py │ └── user.py └── start.py
run.py
from test import start
start.py
from .models import user
user.py
from . import foo
print(foo.baby.Baby)
baby.py
Baby = "I am a baby"
Teraz, kiedy uruchomiszrun.py
plik...
>>> python run.py
... traceback ...
AttributeError: 'module' object has no attribute 'baby'
Ale jeśli zmieniszstart.py
lubię to:
from .models.foo import baby
from .models import user
wszystko działa poprawnie.
Kiedybaby
moduł wstart.py
nie był wczytany wcześniejfoo
obiekt pakietu nie miał odniesienia do niego (foo.baby.Baby
rzuciłAttributeError
). Ale kiedy załadowałembaby
moduł wstart.py
, thefoo
obiekt pakietu automatycznie otrzymał odwołanie dobaby
moduł.
Czy ktoś może mi wyjaśnić, jak to działa?