python自省如何检测我所在的对象

2024-05-14 22:42:23 发布

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

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

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

谢谢!在


Tags: and对象方法函数freefoostack堆栈
1条回答
网友
1楼 · 发布于 2024-05-14 22:42:23

实际上并没有“调用对象”的概念。您可以反省堆栈并发现调用的函数是否有一个名为self的第一个参数,我想如果您是直接从一个正常编码的实例方法调用的(绝对不是aclass method,就像你说的那样。。。我想你是在说可怕的误会,因为一个classmethod的目的是不是有“对象”,也就是说,涉及到一个实例!-),应该可以检测到。在

inspect模块为您提供了高级内省工具(建议仅用于调试和开发目的,从不用于“实际生产使用”。但是,请注意,即使跟踪函数也不是一件小事:您将得到指向代码对象的堆栈帧(它不指向函数)。在

尽管如此,它仍然可以被安排,因为有一些局部变量的伪指令也来自堆栈帧,参数是局部变量,所以您要寻找的是调用方堆栈框架的局部变量中的一个条目,该条目名为self(当然,您还需要乐观和一点运气由于没有人强迫对调用者进行合理的编码,通常命名为self的参数可能会以其他方式命名,那么您就有麻烦了;-)。在

相关问题 更多 >

    热门问题