- файлы < /li>
< /ul>Код: Выделить всё
. ├── package │ ├── __init__.py │ └── submodule.py └── test.py < /code> __init__.py
Код: Выделить всё
from . import submodule as sm
print(dir())
< /code>
[list]
[*]test.py
Код: Выделить всё
import package
print(package.submodule)
< /code>
[list]
[*]run test.py
[/list]
Код: Выделить всё
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'sm', 'submodule']
< /code>
[list]
[*]python version: 3.12.7
[/list]
What happens
You can see the submodule is exposed even when I import it as an alias in __init__.py
чего я ожидаю
Я ожидаю, что тест. /code> Потому что __init __. py не импортировал его напрямую. И я не уверен, является ли это ошибкой в Python.
Точка в этом вопросе заключается в том, что For x import y как z не создает две переменные y < /code> и z в нормальной ситуации. Например, если я использую из импорта пакета подмодуль в качестве sm in test.py , а затем print (dir (dir ()) , результат показывает, что у него нет доступа к подмодуле . Однако в этом вопросе это на самом деле создает две переменные подмопуль и sm .
Я пытаюсь спросить CHATGPT или другие LLMS и искать DOC с python.org Полем Однако я не получил четкого ответа. Это ошибка или обычный дизайн?
Подробнее здесь: https://stackoverflow.com/questions/794 ... ckage-name