如何在 python 中向用户显示模块和子类的文档



我正在尝试编写一个有两个类的模块。第一类称为文本处理

class TextProcessing(object):
""" To carry out text processing 
"""
def __init__(self,):
pass

它有各种用于预处理文本的方法。

类似的其他类用于对预处理数据进行其他数据争吵。

我将这两个类保存在python文件中以使其成为模块。

现在假设用户下载了这个 python 模块,现在想要运行每个类的各种方法。

我想在导入模块时向用户提供有关模块、每个类的方法的某种文档,以便她知道要调用哪个函数以及要传递哪些参数。

想想scikit learn文档在他们的文档页面上是如何的。

http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfTransformer.html

甚至我们这样做时看到的文档

help(some_python_module) 

也很好。

问题是我没有像 sklearn 这样的文档页面来显示文档。我希望用户了解她在 python 控制台中导入模块后可以使用的各种方法的文档。

有没有办法在用户导入模块时将该文档信息打印到控制台?

它可以显示每个类和方法的文档字符串。

这是一件非常奇怪的事情,但绝对是可能的


最简单的办法就是打电话给help。虽然它旨在从交互式提示调用,但没有什么可以阻止您从自己的代码调用它。

当然,你可以提取文档字符串(它们作为__doc__存储在每个模块、类和函数上(,自己textwrap它们,然后print出来,但如果你试图重现help所做的同样的事情,那就是大量的工作,没有真正的好处。


唯一棘手的一点是,您要在其上调用帮助系统的内容是"此当前模块"。你怎么看?它有点笨拙,但是您将此当前模块的名称称为__name__,因此您可以在sys.modules中查找它。

所以:

"""Helpful module"""
import sys
class Spam:
"""Classy class"""
def eggs(self):
"Functional function"
return 2
help(sys.modules[__name__])

现在,当您第一次在会话中import helpful时,它将打印出help


当然,如果有人试图运行一个执行import helpful的脚本,而不是从交互式会话中执行,那将非常奇怪。因此,您可能只想在交互式会话中执行此操作,方法是选中sys.flags

if sys.flags.interactive:
help(sys.modules[__name__])

如果有人做一个import otherthing,而那个otherthing做一个import helpful怎么办?您将获得相同的帮助,这可能会令人困惑。

如果这是一个问题,我能想到的唯一真正的选择是检查调用帧是否来自顶级脚本(以及标志是否是交互式的(。这是非常笨拙的,除非你真的需要,否则你甚至不应该考虑,所以我只是引导你到inspect模块,希望你不需要它。

最新更新