iPython自定义对象标签完成

如何解决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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?