gpt4 book ai didi

python - 如何在python中另一个类的函数中获取调用者类名?

转载 作者:IT老高 更新时间:2023-10-28 20:26:29 25 4
gpt4 key购买 nike

我的目标是为此创建一个应用程序的序列图,我需要在运行时获取有关调用者和被调用者类名的信息。我可以成功检索到调用者函数但无法获取调用者类名?

#Scenario caller.py:

import inspect

class A:

def Apple(self):
print "Hello"
b=B()
b.Bad()



class B:

def Bad(self):
print"dude"
print inspect.stack()


a=A()
a.Apple()

当我打印堆栈时,没有关于调用者类的信息。那么是否可以在运行时检索调用者类?

最佳答案

好吧,在对提示进行了一些挖掘之后,这就是我得到的:

stack = inspect.stack()
the_class = stack[1][0].f_locals["self"].__class__.__name__
the_method = stack[1][0].f_code.co_name

print("I was called by {}.{}()".format(the_class, the_method))
# => I was called by A.a()

调用时:

➤ python test.py
A.a()
B.b()
I was called by A.a()

给定文件test.py:

import inspect

class A:
def a(self):
print("A.a()")
B().b()

class B:
def b(self):
print("B.b()")
stack = inspect.stack()
the_class = stack[1][0].f_locals["self"].__class__.__name__
the_method = stack[1][0].f_code.co_name
print(" I was called by {}.{}()".format(the_class, the_method))

A().a()

不确定当从对象以外的东西调用时它会如何表现。

关于python - 如何在python中另一个类的函数中获取调用者类名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17065086/

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