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()