作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试确定 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/
我是一名优秀的程序员,十分优秀!