首页 > 解决方案 > 搜索python对象层次结构

问题描述

我正在使用一个不稳定的 python 库,该库正在对其各种 git 子模块中的 API 进行更改。每隔几周,某些成员或方法的位置就会更改或重命名。例如,表达式

vk.rinkront[0].asyncamera.printout()

几周前有效,现在该asyncamera成员位于

vk.toplink.enabledata.tx[0].asyncamera[0].print()

grep我设法通过ing、git diffing、ipython 自动完成来找出方法的新位置,并且通常笨手笨脚。这个过程很痛苦,因为存储库已经非常抽象,从 python shell 中观察到的成员名称不一定会出现在 git 子模块代码中。

是否有一个 python 例程在检查关键字(例如print)时执行对象层次结构的图形遍历?(如果没有,我会破解一些 bfs/dfs,在将 、数组、dir() 等内容推送/附加到队列/堆栈之前检查子节点类型 __dict__。但一定有人遇到过这个问题之前并提出一个更优雅的解决方案。)

--------编辑---------

总而言之,是否有一个现有的库可以使以下代码起作用?

import unstable_library
import object_inspecter.search

vk = unstable_library.create()  #initializing vk

object_inspecter.search(vk,"print") #searching for lost method

标签: pythonobjecthierarchygraph-traversal

解决方案


哦,我对你有感觉......你可能应该锁定一个版本,使用它直到 API 变得稳定,然后再升级。这就是复杂项目关注依赖版本控制的原因。

有一种方法,但它不是真正的标准。dir()内置函数返回一个类的所有属性和方法的字符串名称列表。稍微争论一下,您可以编写一个递归挖掘的脚本。

但是,最终的问题是,当您尝试调查类成员时,您将遇到无限递归循环。您需要添加智能来识别模式或限制搜索的深度。


推荐阅读