获取python中调用函数的对象

获取python中调用函数的对象,python,Python,如果我有一个包含方法的类,并且我从一个实例调用该方法,那么如何获取从中调用该方法的特定实例 e、 g.我有一门课: class foo: def __init__(self): pass def do_something(self): bar() 我还有一个功能: def bar(): print() 如果我创建一个对象,例如obj=foo(),然后调用obj.do\u something() 导入检查 def bar(): 调用方=inspect.

如果我有一个包含方法的类,并且我从一个实例调用该方法,那么如何获取从中调用该方法的特定实例

e、 g.我有一门课:

class foo:
   def __init__(self):
      pass
   def do_something(self):
      bar()
我还有一个功能:

def bar():
   print()

如果我创建一个对象,例如
obj=foo()
,然后调用
obj.do\u something()

导入检查
def bar():
调用方=inspect.stack()[1]。框架
localvars=caller.f_locals
self=localvars['self']

这是该方法的第一个参数,通常称为
self
。但这对我没有帮助,因为
self
没有传递到
bar
,所以我没有访问它的权限。所以,将它传递到
bar
。否则,
bar
将无法访问它。但关键是不必将其传递给bar。我知道你可以用insepct模块做一些事情来找到函数名和调用它的文件,但是我找不到任何地方如何获得对对象的引用,所以我在这里询问,以防有人知道这听起来像是XY问题;您试图解决的问题是,
bar
需要这样一个引用?严格来说,这仅假设名称
self
绑定到调用方法的某个对象
self
可以用于任何事情,而且,
bar
没有理由假设它是从方法内部调用的,或者是在任何其他特定上下文中调用的。@chepner我假设这不是用于生产的,更像是一种黑客行为,提问者不能控制
foo
类代码。无论如何,您可能不想在一个严肃的项目中使用
inspect
。我在执行代码时出错:“tuple”对象没有属性“frame”。@NandiniAshokTuptewar如果您使用的是Python 2,则必须将
.frame
替换为
[0]
,因为堆栈返回的帧信息是元组,而不是命名元组。