Импорт Python-функций и приватных функций с конфликтующими именами модулей - PullRequest
0 голосов
/ 22 марта 2019

Скажем, у меня есть следующая структура каталогов пакета Python:

package
    sample/
        __init__.py
        a.py

Где sample/a.py содержит несколько функций:

def _a(x):
    ...
    return some_result

def _b():
    return 7

def a(x):
    """
    Wrapper for `_a()`
    """
    return _a(x)

def c():
    return _b()

Обычно для вызова a(), ябудет делать:

import sample as smp

smp.a.a(5)

Но чтобы сделать его немного проще и потребовать меньше набирать текст (поскольку имена моих модулей и имена функций намного длиннее), я мог бы изменить файл sample/__init__.py с помощью:

from .a import a

И теперь я могу сделать:

import sample as smp

smp.a(5)

Однако бывают случаи, когда мне нужно вызывать некоторые другие функции, такие как _b() или c() (т. Е. Для некоторыхмодульные тесты), но я не хочу, чтобы эти функции были (легко) доступны пользователю как smp._b() или smp.c().Таким образом, изменение sample/__init__.py следующим: нежелательно :

from .a import a, _b, c

Вместо этого я хочу, чтобы другие функции были доступны только таким образом:

import sample as smp

smp.a(5)

# The following lines will error out
smp.a._(5)
smp.a._b()
smp.a.c()

Однако это невозможно, поскольку smp.a уже определено как функция, а не как имя модуля.Как я могу сделать это, не перемещая дополнительные функции в отдельный файл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...