获取调用方法的对象

时间:2019-07-18 15:07:20

标签: python-3.x

我需要获取调用另一个函数的对象方法。我不想要它的名字,而是实际的对象。

到目前为止,我明白了。

import inspect

def info():
    stack_call = inspect.stack()
    cls_method = stack_call[1][3]
    cls_obj = stack_call[1].frame.f_locals["self"]
    cls_members = inspect.getmembers(cls_obj)
    my_obj = None
    for el in cls_members:
        if el[0] == cls_method:
            my_obj = el[1]
            break
    print(my_obj)


class Bob:
    def __int__(self):
        pass

    def jim(self):
        info()


test = Bob()
test.jim()

它可以完成我想做的事情,但我不喜欢必须遍历列表以找到正确的方法及其名称。

我尝试了很多事情,但是看不到如何使其变得更好。

会有谁有更好的版本?

1 个答案:

答案 0 :(得分:0)

有些不同:

def info():
    stack_call = inspect.stack()
    cls_obj = stack_call[1].frame.f_locals[list(stack_call[1].frame.f_locals.keys())[0]]
    cls_method = getattr(cls_obj, stack_call[1][3])
    print(cls_method)