在研究一段未知的Python代码时,我偶尔会碰到
varName.methodName()
图案。在
为了弄清楚这是什么,我将进一步研究代码,找到varName的实例化位置,找到它的类型。因此,如果varName被证明是类名类的一个实例,我就知道methodName()是类名的一个方法。在
有时varName==self和methodName()是此类的一个方法,或者是从其他类继承的方法,如果当前类是其他一些类的子类。在
有没有快速的方法/工具可以将“methodName”作为输入,扫描所有已安装的Python模块,并显示哪些类具有methodName()?在
据我所知,与此最接近的是ipython。如果我键入一个类名,然后是点('.'),然后是TAB,它可以显示类成员。我可以用一个对象的名字代替一个类(它是某个类的一个实例),它也可以工作。一旦我从提供的选项中选择了一个方法名,我就可以键入“?”或者是“??”如果有一个docstring就找人帮忙。在
我想知道ipython是否可以仅基于“methodName”字符串进行智能扫描。在
如果你知道ipython的替代品可能有助于这一点,请一定建议他们。在
编辑:根据请求,我明确地添加了一个方法,我希望能够通过方法名来查找方法,而不仅仅是在Python源代码文件中。一些Python包(特别是PyQt)包含很多.so文件,ipython可以通过先导入来完成。所以像grep(甚至ctags)这样的纯文本搜索在这里不会起作用。在
我将采用类似于lieryan的交互式方法:在调试模式下运行脚本,在感兴趣的行设置一个中断,并交互式地查询相关变量。在
这是一种比您请求的“扫描源代码以查找匹配的方法名”更可靠的方法,因为它可以保证得到您真正想知道的变量,而不是返回一组可能的值。在
您需要Exuberant ctags(旧的ctag不会为Python生成标记)。在
安装完成后(安装方式取决于您的平台),请在您的文件上运行:
(您可以多次运行它来将标记附加到现有的标记文件中,让它递归到子目录中,等等,所有这些都带有命令行选项)并且它生成一个
^{pr2}$tags
文件,如下所示(为了简洁起见,我使用一个Python文件,其中一个类定义了一个方法):现在,引用this article:
另外,control-p对在
tags
中找到的标识符做了(一些尝试)代码完成。 (vim中的:help tags
将提供更多详细信息)。在有时我会在代码中插入
help(varName)
,这样当特定函数运行时,帮助文件就会出现。例如,如果我有以下代码:我想弄清楚什么是类bar,baz是做什么的,我只插入这个
^{pr2}$然后运行脚本。另一种微创的方法是使用
print type(bar)
。在相关问题 更多 >
编程相关推荐