Slo*_*oke 6 python python-import python-packaging
假设我有一个模块:
mymodule/example.py:
def add_one(number):
return number + 1
Run Code Online (Sandbox Code Playgroud)
和mymodule/__init__.py:
from .example import *
foo = "FOO"
def bar():
return 1
Run Code Online (Sandbox Code Playgroud)
现在我在 的根部看到该函数mymodule:
>>> import mymodule
>>> mymodule.add_one(3)
4
>>> mymodule.foo
'FOO'
Run Code Online (Sandbox Code Playgroud)
另外,我看到add_one通过dir以下方式导入example:
>>> dir(mymodule)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'add_one', 'bar', 'example', 'foo']
Run Code Online (Sandbox Code Playgroud)
但是当我输入时,help(mymodule)我只看到example,foo和bar,但看不到导入的add_one:
Help on package mymodule:
NAME
mymodule
PACKAGE CONTENTS
example
FUNCTIONS
bar()
DATA
foo = 'FOO'
Run Code Online (Sandbox Code Playgroud)
但我可以调用add_one()作为 的根函数mymodule。是否可以在帮助中看到它作为根函数?
来自 help() 的源代码(pydoc.py 下的 docmodule)
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))
Run Code Online (Sandbox Code Playgroud)
重要的是inspect.getmodule(value) is object),这是不直接属于对象本身的值被删除的地方
您可以添加这一行
__all__ = ['bar', 'add_one', 'FOO']
Run Code Online (Sandbox Code Playgroud)
到您的__init__.py文件,这样帮助功能将确保在帮助中包含这些对象
请记住,如果您执行此操作,则您未包含在此列表中的任何内容都不会包含在内