gpt4 book ai didi

python - 如何在 python 中找到调用函数的类?

转载 作者:太空狗 更新时间:2023-10-30 00:37:27 33 4
gpt4 key购买 nike

我正在尝试确定 python 中调用函数的所属类。例如,我有两个类(class),ClassA 和 ClassB。我想知道 classb_instance.call_class_a_method() 何时是 class_a.class_a_method() 的调用者,这样:

class ClassA(object):
def class_a_method(self):
# Some unknown process would occur here to
# define caller.
if caller.__class__ == ClassB:
print 'ClassB is calling.'
else:
print 'ClassB is not calling.'

class ClassB(object):
def __init__(self):
self.class_a_instance = ClassA()
def call_class_a_method(self):
self.class_a_instance.class_a_method()

classa_instance = ClassA()
classa_instance.class_a_method()
classb_instance = ClassB()
classb_instance.call_class_a_method()

输出将是:

'ClassB is not calling.'
'ClassB is calling.'

似乎 inspect 应该能够做到这一点,但我不知道如何做。

最佳答案

好吧,如果您想遍历调用堆栈并找到调用它的类(如果有的话),这很简单:

def class_a_method(self):
stack = inspect.stack()
frame = stack[1][0]
caller = frame.f_locals.get('self', None)

如果要检查调用者是否为 ClassB 类型,则应使用 isinstance(caller, ClassB) 而不是对 __class__ 进行比较。然而,这通常是非 pythonic 的,因为 python 是鸭子类型的。

正如其他人所说,您的应用很可能需要重新设计以避免使用 inspect.stack。它的 CPython 实现功能,不保证在其他 Python 实现中存在。此外,这只是错误的做法。

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

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