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

复制代码
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 @   胖豆芽  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示