iPython自定义对象标签完成

问题描述

我们正计划在交互式环境中使用iPython和/或Jupyter笔记本与我们的DUT(被测设备)进行交互。

将创建类,以与DUT进行交互,但是某些函数带有“许多”参数。我希望能够通过将制表符完成功能增强为:

DUT。

  • 根据先前键入的字母显示所有可用于发送到DUT,缩小范围等的命令

DUT.a

  • 显示以A开头的所有可用命令

DUT.activate(

DUT.activate(A

  • 显示以A开头的** kwarg的第一个参数或潜在关键字的选项

DUT.activate(1,ACTUATOR =

  • 显示有关** kwarg 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)