我被哪个方法,哪个类 调用了

import inspect

def func1():
    caller = inspect.stack()[1].function
    '''
    stack  堆栈;[0] 是自己所在的方法;  [1]是被调用的方法
    '''
    print(f"func1方法被{caller}方法调用了")

def func2():
    func1()

if __name__ == '__main__':
    func2()

 

import inspect
class Animal:
    def func1(self):
        caller = inspect.stack()[1].function
        '''
        stack  堆栈[0] 是自己;  [1]是被调用的方法
        '''
        print(f"func1方法被{caller}方法调用了")
class Tiger():
    def func2(self):
        animal = Animal()
        animal.func1()

if __name__ == '__main__':
    tiger = Tiger()
    tiger.func2()

 

import inspect
class Animal:
    def func1(self):
        caller = inspect.stack()[1].function

        calling_class = inspect.stack()[1].frame.f_locals.get('self').__class__.__name__
        '''
        stack  堆栈[0] 是自己;  [1]是被调用的方法
        caller = inspect.stack()[1].function 获得被哪个方法调用
        calling_class = inspect.stack()[1].frame.f_locals.get('self').__class__.__name__ 获得被哪个类调用
        '''
        print(f"func1方法被{calling_class}类调用了")# func1方法被Tiger类调用了
        print(f"func1方法被{caller}类调用了")# func1方法被func2类调用了


class Tiger():
    def func2(self):
        animal = Animal()
        animal.func1()

if __name__ == '__main__':
    tiger = Tiger()
    tiger.func2()

 

posted @ 2023-08-14 14:44  胖豆芽  阅读(7)  评论(0编辑  收藏  举报