python 动态获取当前运行的类名和函数名的方法


Posted in Python onApril 15, 2014

一、使用内置方法和修饰器方法获取类名、函数名

python中获取函数名的情况分为内部、外部,从外部的情况好获取,使用指向函数的对象,然后用__name__属性

def a():pass
a.__name__

除此之外还可以:
getattr(a,'__name__')

尽管有些脱裤子放屁,总之,从外部获取的方法是非常灵活的。

有些同学需要从函数内部获取函数本身的名字,就需要用些技巧了。
1.使用sys模块的方法:

def a():
print sys._getframe().f_code.co_name

f_code和co_name可以参考python源码解析的pyc生成和命名空间章节。
2.使用修饰器的方法:
使用修饰器就可以对函数指向一个变量,然后取变量对象的__name__方法。
def timeit(func):
def run(*argv):
   print func.__name__
   if argv:
    ret = func(*argv)
   else:
    ret = func()
   return ret
return run
@timeit
def t(a):
print a 
t(1)

二、使用inspect模块动态获取当前运行的函数名

import inspect
def get_current_function_name():
    return inspect.stack()[1][3]
class MyClass:
    def function_one(self):
        print "%s.%s invoked"%(self.__class__.__name__, get_current_function_name())
if __name__ == "__main__":
    myclass = MyClass()
    myclass.function_one()

动态获取当前运行的函数名很方便,特别是对于一些debug系统来说
Python 相关文章推荐
Python判断Abundant Number的方法
Jun 15 Python
Python实现一个Git日志统计分析的小工具
Dec 14 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
Mar 14 Python
python执行精确的小数计算方法
Jan 21 Python
Python里字典的基本用法(包括嵌套字典)
Feb 27 Python
Python3+Selenium+Chrome实现自动填写WPS表单
Feb 12 Python
python正则表达式 匹配反斜杠的操作方法
Aug 07 Python
python中的split、rsplit、splitlines用法说明
Oct 23 Python
matplotlib grid()设置网格线外观的实现
Feb 22 Python
python实现图片九宫格分割的示例
Apr 25 Python
Python Pygame实战在打砖块游戏的实现
Mar 17 Python
python实现会员管理系统
Mar 18 Python
python使用百度翻译进行中翻英示例
Apr 14 #Python
python使用xauth方式登录饭否网然后发消息
Apr 11 #Python
python判断、获取一张图片主色调的2个实例
Apr 10 #Python
Python使用新浪微博API发送微博的例子
Apr 10 #Python
一个检测OpenSSL心脏出血漏洞的Python脚本分享
Apr 10 #Python
Python删除指定目录下过期文件的2个脚本分享
Apr 10 #Python
python实现随机密码字典生成器示例
Apr 09 #Python
You might like
新浪新闻小偷
2006/10/09 PHP
谈谈新手如何学习PHP
2006/12/23 PHP
PHP字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
把textarea中字符串里含有的回车换行替换成<br>的javascript代码
2007/04/20 Javascript
判断用户的在线状态 onbeforeunload事件
2011/03/05 Javascript
Prototype源码浅析 Enumerable部分之each方法
2012/01/16 Javascript
jQuery内容过滤选择器用法分析
2015/02/10 Javascript
JavaScript实现仿网易通行证表单验证
2015/05/25 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
详解Angular开发中的登陆与身份验证
2016/07/27 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
2017/05/27 Javascript
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
2018/05/13 Javascript
微信运维交互机器人的示例代码
2018/11/12 Javascript
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
2019/11/01 Javascript
[01:04]DOTA2:伟大的Roshan雕塑震撼来临
2015/01/30 DOTA
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
[01:23:45]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第一场 1月22日
2021/03/11 DOTA
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
python 获取键盘输入,同时有超时的功能示例
2018/11/13 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
Python字符串大小写转换拼接删除空白
2019/09/19 Python
在echarts中图例legend和坐标系grid实现左右布局实例
2020/05/16 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
详解pandas赋值失败问题解决
2020/11/29 Python
深入解析HTML5使用SVG图像时的viewBox属性用法
2015/09/02 HTML / CSS
Otticanet英国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/02/10 全球购物
澳洲Chemist Direct药房中文网:澳洲大型线上直邮药房
2019/11/04 全球购物
中年人生感言
2014/02/04 职场文书
课前三分钟演讲稿
2014/04/24 职场文书
户外宣传策划方案
2014/05/25 职场文书
镇创先争优活动总结
2014/08/28 职场文书
手术室消毒隔离制度
2015/08/05 职场文书
python 进阶学习之python装饰器小结
2021/09/04 Python