python - 搜索python对象层次结构
问题描述
我正在使用一个不稳定的 python 库,该库正在对其各种 git 子模块中的 API 进行更改。每隔几周,某些成员或方法的位置就会更改或重命名。例如,表达式
vk.rinkront[0].asyncamera.printout()
几周前有效,现在该asyncamera
成员位于
vk.toplink.enabledata.tx[0].asyncamera[0].print()
grep
我设法通过ing、git diff
ing、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
解决方案
哦,我对你有感觉......你可能应该锁定一个版本,使用它直到 API 变得稳定,然后再升级。这就是复杂项目关注依赖版本控制的原因。
有一种方法,但它不是真正的标准。dir()
内置函数返回一个类的所有属性和方法的字符串名称列表。稍微争论一下,您可以编写一个递归挖掘的脚本。
但是,最终的问题是,当您尝试调查类成员时,您将遇到无限递归循环。您需要添加智能来识别模式或限制搜索的深度。
推荐阅读
- android - 使服务无限期运行并与活动通信
- javascript - 如何在angular2 +中的模板视图中进行嵌套循环
- ios - 多重 UIBezierPath 的渐变
- html - 当我在桌面上调整浏览器大小时,我的网站是响应式的,但是当我使用实际的移动设备时,它没有响应式
- apache - BookStack 的 SSL 配置不正确
- python - 在 cv2 中使用 imwrite 保存黑色图像
- javascript - 将坐标数组转换为 google.maps.LatLng 数组
- python - 从列表中成对嵌套列表
- java - spring maven安装或清理错误,为什么?
- c++ - 带有acos的两个向量之间的C ++角度