【问题标题】:iPython custom object tab completioniPython 自定义对象选项卡完成
【发布时间】:2020-09-27 22:21:18
【问题描述】:

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

将创建类等以与 DUT 交互,但某些函数采用“许多”参数。我希望能够通过增强 tab-completion 来帮助我们的用户:

DUT.

  • 根据之前输入的字母显示所有可发送到 DUT 的命令、缩小范围等

DUT.a

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

DUT.activate(

  • 显示第一个参数的选项,或 **kwargs 的潜在关键字

DUT.activate(A

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

DUT.activate(1, ACTUATOR=

  • 显示 **kwarg ACTUATOR 的帮助,可能还有它可以采用的枚举名称等。

我知道这个问题是开放式的,但谷歌似乎没有找到任何关于这一点或更糟的例子,没有说这是否是“正确”的做法。我能想到的所有关键字并没有真正将搜索范围缩小到任何主题。

我见过ipython.set_hook('complete_command',...),但我真的找不到任何关于它的文档。

老实说,我希望有一种方法来装饰/记录我的课程,这样它就可以从文档字符串中提取出来,这将是最棒的,但如果我知道我是如何做到的,我可以做到这一点 应该挂钩到 tab 补全。

如果我可以让它在 VSCODE 中的标准智能感知东西下工作,那么加分(很多行为都可以在编写脚本和交互方式中使用)。

还是我太有野心了?​​

【问题讨论】:

    标签: python ipython tab-completion


    【解决方案1】:

    这确实是一个开放式问题。我的建议和建议:

    如果您实例化一个对象,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, ab, 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, ab, 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]:
    

    使用此文档字符串,您还可以生成自动文档。例如模块 sphinx 支持不同的输出格式:pdf, html, ...

    VS code,intellisense也能看懂docstring。 caveat虽然有,但是好像不支持主流格式。

    对于 Jupyter 笔记本,您还可以安装一个类似于 intellisense 的插件,称为 Kite (Copilot)

    【讨论】: