get_attr()
inspect.stack()
inspect.stack()[1][3]返回的是函数名????
如何获取一个函数的名称:
经验:在函数A在调用函数B时在入参处调用函数C,等于函数A调用函数C,没B什么事?
import inspect
class a(object):
def __init__(self):
pass
def get_function_name(self):
print inspect.stack()
return inspect.stack()[1][3]
def func_a(self,name):
print name
def func_b(self):
self.func_a(self.get_function_name())
if __name__ == '__main__':
t1=a()
t1.func_b()
"""
[(<frame object at 0x00F2DDA0>, 'D:\\1\\201503\\\xc3\xbf\\python\\reflect_test.py', 9, 'get_function_name', [' print inspect.stack()\n'], 0),
(<frame object at 0x00F2DC48>, 'D:\\1\\201503\\\xc3\xbf\\python\\reflect_test.py', 17, 'func_b', [' self.func_a(self.get_function_name())\n'], 0),
(<frame object at 0x00EC6030>, 'D:\\1\\201503\\\xc3\xbf\\python\\reflect_test.py', 22, '<module>', [' t1.func_b()\n'], 0)]
func_b
"""
2
import inspect
class a(object):
def __init__(self):
pass
def get_function_name(self):
print inspect.stack()
return inspect.stack()[1][3]
def func_a(self,name):
print name
def func_b(self):
self.func_a(self.get_function_name())
def func_c(self):
self.func_b()
if __name__ == '__main__':
t1=a()
t1.func_c()
"""
[(<frame object at 0x0107E030>, 'D:\\1\\201503\\\xc3\xbf\\python\\reflect_test1.py', 9, 'get_function_name', [' print inspect.stack()\n'], 0),
(<frame object at 0x00F32DA0>, 'D:\\1\\201503\\\xc3\xbf\\python\\reflect_test1.py', 17, 'func_b', [' self.func_a(self.get_function_name())\n'], 0),
(<frame object at 0x00F32C48>, 'D:\\1\\201503\\\xc3\xbf\\python\\reflect_test1.py', 20, 'func_c', [' self.func_b()\n'], 0),
(<frame object at 0x00EC4030>, 'D:\\1\\201503\\\xc3\xbf\\python\\reflect_test1.py', 25, '<module>', [' t1.func_c()\n'], 0)]
func_b
"""
3
import inspect
class a(object):
def __init__(self):
pass
def get_function_name(self):
print inspect.stack()
return inspect.stack()[1][3]
def func_a(self,name):
print name
def func_b(self):
self.func_a(self.get_function_name())
def func_c(self):
return self.get_function_name()
def func_d(self):
print self.func_c()
if __name__ == '__main__':
t1=a()
t1.func_d()
"""
[(<frame object at 0x01074030>, 'D:\\1\\201503\\\xc3\xbf\\python\\reflect_test2.py', 9, 'get_function_name', [' print inspect.stack()\n'], 0),
(<frame object at 0x00F2DDA0>, 'D:\\1\\201503\\\xc3\xbf\\python\\reflect_test2.py', 20, 'func_c', [' return self.get_function_name()\n'], 0),
(<frame object at 0x00F2DC48>, 'D:\\1\\201503\\\xc3\xbf\\python\\reflect_test2.py', 23, 'func_d', [' print self.func_c()\n'], 0),
(<frame object at 0x00EC6030>, 'D:\\1\\201503\\\xc3\xbf\\python\\reflect_test2.py', 28, '<module>', [' t1.func_d()\n'], 0)]
func_c
"""