gpt4 book ai didi

python introspection - 如何检测我所在的对象

转载 作者:太空宇宙 更新时间:2023-11-03 11:35:54 26 4
gpt4 key购买 nike

假设我有一个从类方法中调用的自由函数。有没有办法让我在自由函数中反省调用堆栈并确定调用我的对象?

def foo(arg1) :
s = ? #Introspect call stack and determine what object called me
# Do something with s

谢谢!

最佳答案

实际上并没有“调用对象”的概念。您可以内省(introspection)堆栈并查找您的调用 函数 是否有一个名为 self 的第一个参数,我猜 - 如果您直接从一个正常编码的 调用实例方法(绝对不是你说的class method...我想你只是说错了,因为目的 classmethod有“一个对象”,即一个实例,涉及!-),应该检测到。

inspect模块为您提供高级内省(introspection)工具(建议用于调试和开发目的,绝不用于“实际生产使用”!!!)。但是,请注意,即使跟踪函数 也不是微不足道的:您得到堆栈帧,它指向代码对象(它指向后面到函数)。

仍然,它可以被安排,因为局部变量的伪指令也从堆栈帧指向,并且参数是局部变量,所以你要找的是名为 self 的调用者堆栈框架的局部变量(此外,当然你需要很多乐观和一点点运气,因为没有人强制你的调用者被编码明智地 -- 通常命名为 self 的参数 可以 以其他方式命名,然后你就有麻烦了;-)。

关于python introspection - 如何检测我所在的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3238673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com