是否可以使 __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)
时,我只看到 example
、foo
和 bar
,而不是导入的 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
文件中,这样帮助功能将确保将这些对象包含在帮助中
请记住,如果您这样做,您未包含在此列表中的任何内容都不会包含在内
假设我有一个模块:
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)
时,我只看到 example
、foo
和 bar
,而不是导入的 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
文件中,这样帮助功能将确保将这些对象包含在帮助中
请记住,如果您这样做,您未包含在此列表中的任何内容都不会包含在内