问题描述
我们正计划在交互式环境中使用iPython和/或Jupyter笔记本与我们的DUT(被测设备)进行交互。
将创建类,以与DUT进行交互,但是某些函数带有“许多”参数。我希望能够通过将制表符完成功能增强为:
DUT。
- 根据先前键入的字母显示所有可用于发送到DUT,缩小范围等的命令
DUT.a
- 显示以A开头的所有可用命令
DUT.activate(
DUT.activate(A
DUT.activate(1,ACTUATOR =
我知道这个问题是开放式的,但是google似乎没有找到任何关于点或更差的示例,没有说这是否是“正确”的方法。我能拿出的所有关键字并没有真正将搜索范围缩小到主题。
我见过ipython.set_hook('complete_command',...)
,但实际上找不到任何文档。
老实说,我希望有一种方法可以修饰/记录我的类,以便可以将它从文档字符串中吸走,这将是最棒的,但是如果我知道自己如何做,我可以做到这一点应该插入选项卡补全。
如果我能使它在VSCODE的标准智能感知功能下工作,则可以获得额外的奖励(很多行为在编写脚本和交互操作时都可以使用)。
或者我在这里太有野心了吗?
解决方法
这确实是一个开放式问题。我的建议和评论:
如果您实例化一个对象,则iPython Shell将自动执行制表符补全。但是它还显示了inspection和python的所有魔术关键字。
您还可以查看Python文档字符串功能。使用它,您可以在类上调用内部help()
函数,它将吐出文档。例如:
In [7]: class A(object):
...: def __init__(self):
...: self.a = 1
...: self.autostart = 'b'
...: def activate(aa,ab,actuator):
...: """
...: function to activate the DUT
...: :param aa: first parameter
...: :param ab: second parameter
...: :param actuator: actuator param
...: :returns: None
...: """
...: print(aa,actuator)
...:
In [8]: a = A()
In [9]: help(A)
Help on class A in module __main__:
class A(__builtin__.object)
| Methods defined here:
|
| __init__(self)
|
| activate(aa,actuator)
| function to activate the DUT
| :param aa: first parameter
| :param ab: second parameter
| :param actuator: actuator param
| :returns: None
|
| ----------------------------------------------------------------------
| Data descriptors defined here:
|
| __dict__
| dictionary for instance variables (if defined)
|
| __weakref__
| list of weak references to the object (if defined)
In [10]:
使用此文档字符串,您还可以生成自动文档。例如,模块狮身人面像支持不同的输出格式:pdf,html,...
VS代码,intellisense也可以理解文档字符串。尽管caveat似乎并不支持主流格式。
对于Jupyter笔记本电脑,您还可以安装一个类似于intellisense的插件,称为Kite(Copilot)