有什么方法可以跟踪Python应用程序中的每个对象(例如,使用唯一的id)?

问题描述 投票:0回答:1

我正在尝试创建一个模型来表示 python 应用程序执行的一部分(记录一些对象的创建、访问属性、循环等)。

我无法解决的一个问题是,我无法找到一种方法来识别每次遇到的对象。

有什么方法可以在应用程序执行期间跟踪每个对象(以知道某个对象与之前遇到的对象相同还是另一个对象)?

  • 我这样做是因为我希望获得应用程序运行时的一些日志(或跟踪),以便稍后能够从日志中推断出一些模式。这是一个可以安装到另一个项目中、检测其代码并收集必要日志的库。
  • 现在我正在使用 DynaPyt 来检测代码。 (这意味着我可以访问我正在记录的对象,但可能无法更改其源代码)

我尝试使用

id(x)
但这是不正确的,因为
id
函数没有有意义的返回值,甚至在不同对象的生命周期不重叠的情况下具有重复值(至少在 CPython 中,我相信,如它返回对象的内存地址)。

我还尝试在整个代码中将

UUID
附加到对象上,以使用它来跟踪它们,但是并非所有对象都允许向它们添加属性。 我尝试将内置实例转换为一些从它们继承的自定义类,以便能够将
UUID
附加到它们。比如:

class CustomList(list):
    pass

但话又说回来,我相信这可能会带来性能问题,而且还有(我认为是无限的)其他不可变对象,例如

UUID
对象本身,它们不允许我为它们附加属性。

python instrumentation
1个回答
0
投票

也许你可以尝试在将对象初始化为键并将对象初始化为值时使用字典作为变量名称。

© www.soinside.com 2019 - 2024. All rights reserved.