是否可以使 __init__.py` 中的导入对 python `help()` 命令可见?

Is it possible to make the imports within `__init__.py` visible for python `help()` command?

假设我有一个模块:

mymodule/example.py:

def add_one(number):
    return number + 1

mymodule/__init__.py

from .example import *

foo = "FOO"

def bar():
    return 1

现在我看到 mymodule 的根函数:

>>> import mymodule
>>> mymodule.add_one(3)
4
>>> mymodule.foo
'FOO'

此外,我看到通过 dir 导入了 add_one 以及 example:

>>> dir(mymodule)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'add_one', 'bar', 'example', 'foo']

但是当我输入 help(mymodule) 时,我只看到 examplefoobar,而不是导入的 add_one:

Help on package mymodule:

NAME
    mymodule

PACKAGE CONTENTS
    example

FUNCTIONS
    bar()

DATA
    foo = 'FOO'

但是我可以调用add_one()作为mymodule的根函数。是否可以在帮助中看到它作为根函数?

来自help()的源代码(docmodule under pydoc.py)

        for key, value in inspect.getmembers(object, inspect.isroutine):
            # if __all__ exists, believe it.  Otherwise use old heuristic.
            if (all is not None or
                inspect.isbuiltin(value) or inspect.getmodule(value) is object):
                if visiblename(key, all, object):
                    funcs.append((key, value))

重要的部分是 inspect.getmodule(value) is object),这是不直接属于对象本身的值被丢弃的地方

您可以添加此行

__all__ = ['bar', 'add_one', 'FOO']

添加到您的 __init__.py 文件中,这样帮助功能将确保将这些对象包含在帮助中

请记住,如果您这样做,您未包含在此列表中的任何内容都不会包含在内