获取python中调用函数的对象
如果我有一个包含方法的类,并且我从一个实例调用该方法,那么如何获取从中调用该方法的特定实例 e、 g.我有一门课:获取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.
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]
,因为堆栈返回的帧信息是元组,而不是命名元组。