研究未知Python api的简单方法

2024-09-29 19:22:44 发布

您现在位置:Python中文网/ 问答频道 /正文

在研究一段未知的Python代码时,我偶尔会碰到

varName.methodName()

图案。在

为了弄清楚这是什么,我将进一步研究代码,找到varName的实例化位置,找到它的类型。因此,如果varName被证明是类名类的一个实例,我就知道methodName()类名的一个方法。在

有时varName==selfmethodName()是此类的一个方法,或者是从其他类继承的方法,如果当前类是其他一些类的子类。在

有没有快速的方法/工具可以将“methodName”作为输入,扫描所有已安装的Python模块,并显示哪些类具有methodName()?在

据我所知,与此最接近的是ipython。如果我键入一个类名,然后是点('.'),然后是TAB,它可以显示类成员。我可以用一个对象的名字代替一个类(它是某个类的一个实例),它也可以工作。一旦我从提供的选项中选择了一个方法名,我就可以键入“?”或者是“??”如果有一个docstring就找人帮忙。在

我想知道ipython是否可以仅基于“methodName”字符串进行智能扫描。在

如果你知道ipython的替代品可能有助于这一点,请一定建议他们。在

编辑:根据请求,我明确地添加了一个方法,我希望能够通过方法名来查找方法,而不仅仅是在Python源代码文件中。一些Python包(特别是PyQt)包含很多.so文件,ipython可以通过先导入来完成。所以像grep(甚至ctags)这样的纯文本搜索在这里不会起作用。在


Tags: 文件实例方法代码self证明类型键入
3条回答

我将采用类似于lieryan的交互式方法:在调试模式下运行脚本,在感兴趣的行设置一个中断,并交互式地查询相关变量。在

这是一种比您请求的“扫描源代码以查找匹配的方法名”更可靠的方法,因为它可以保证得到您真正想知道的变量,而不是返回一组可能的值。在

您需要Exuberant ctags(旧的ctag不会为Python生成标记)。在

安装完成后(安装方式取决于您的平台),请在您的文件上运行:

$ /usr/local/bin/ctags *py

(您可以多次运行它来将标记附加到现有的标记文件中,让它递归到子目录中,等等,所有这些都带有命令行选项)并且它生成一个tags文件,如下所示(为了简洁起见,我使用一个Python文件,其中一个类定义了一个方法):

^{pr2}$

现在,引用this article

Let say when you discover a function call which you wanna see the definition, simply point the cursor to that function and press ctrl ] and it will bring you there. If you want to go back to where you came from, simply press ctrl t. Instead of ctrl t, I like to use ctrl i and ctrl o to travel to forward and backward of the check points.

另外,control-p对在tags中找到的标识符做了(一些尝试)代码完成。 (vim中的:help tags将提供更多详细信息)。在

有时我会在代码中插入help(varName),这样当特定函数运行时,帮助文件就会出现。例如,如果我有以下代码:

def foo(bar):
    bar.baz()

我想弄清楚什么是类bar,baz是做什么的,我只插入这个

^{pr2}$

然后运行脚本。另一种微创的方法是使用print type(bar)。在

相关问题 更多 >

    热门问题