Код: Выделить всё
python
├── main.ipynb
├── package
│ ├── __init__.py
│ ├── function.py
│ └── operations.py
├── pyproject.toml
├── README.md
└── uv.lock
Код: Выделить всё
# function.py
from package.operations import my_add, my_multiply
def my_function(alpha, beta, x, y):
return my_add(my_multiply(alpha, x), my_multiply(beta, y))
Код: Выделить всё
# operations.py
def my_add(x, y):
return x + y
def my_multiply(x, y):
return x * y
Код: Выделить всё
from package.function import my_function, my_add
Почему это происходит и следует ли этого избегать?
Я предполагаю, что это происходит потому, что при импорте package.function импорт выполняется в function.py, которые затем добавляются в пространство имен. Но мне кажется опасным разрешать импорт my_add непосредственно из function.py, потому что он не определен там, где он определен. Похоже, что это частично нарушает защиту от коллизий имен, которую должна обеспечивать модульность.
В любом случае, как лучше всего действовать в такой ситуации?
Мобильная версия