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 dobabymoduł.

Czy ktoś może mi wyjaśnić, jak to działa?

questionAnswers(1)

yourAnswerToTheQuestion