Как контролировать, какие объекты импортируются из модуля - PullRequest
0 голосов
/ 30 октября 2019

У меня есть модуль, и я хотел бы контролировать, какие объекты импортируются из него. Структура выглядит примерно так:

/src
    /example_pkg
        __init__.py
        foo.py
    __init__.py

__init__.py пусто в обоих случаях

foo.py выглядит так:

import numpy as np

def foo_func():
    x = np.sin(1)
    print('sine of 1 is ' + str(x))

при импорте fooследующим образом:

import foo
dir(foo)

Я получаю этот вывод:

['__builtins__',
 '__cached__',
 '__doc__',
 '__file__',
 '__loader__',
 '__name__',
 '__package__',
 '__spec__',
 'foo_func',
 'np']

Для аккуратности я бы не стал импортировать np с этим, чтобы, когда я набираю foo. и нажимал клавишу табуляции, автозаполнение(например, в spyder) просто показывает объекты из моего модуля. Я бы предпочел, чтобы команда импорта просто автоматически импортировала все объекты, созданные в foo.py. Можно ли это сделать? Я бы предпочел избегать from foo import * и определять все объекты в __init__.py

Я понимаю, что это основной вопрос, но я оглянулся и не вижу очевидного ответа.

1 Ответ

0 голосов
/ 30 октября 2019

Это действительно зависит от вашего автозаполнения, но следует соблюдать соглашение, что имена с префиксом _ не предназначены для использования вне самого модуля. (from foo import * сам будет игнорировать такие имена.)

Использовать

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