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支持断点续传的多线程下载示例
Jan 16 Python
Python查找相似单词的方法
Mar 05 Python
Python中模块与包有相同名字的处理方法
May 05 Python
python微信公众号之关键词自动回复
Jun 15 Python
Python使用pyodbc访问数据库操作方法详解
Jul 05 Python
caffe binaryproto 与 npy相互转换的实例讲解
Jul 09 Python
对Python 多线程统计所有csv文件的行数方法详解
Feb 12 Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
Jun 12 Python
python3 Scrapy爬虫框架ip代理配置的方法
Jan 17 Python
Python中求对数方法总结
Mar 10 Python
利用python实现凯撒密码加解密功能
Mar 31 Python
pytorch 运行一段时间后出现GPU OOM的问题
Jun 02 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
php $_SERVER当前完整url的写法
2009/11/12 PHP
php若干单维数组遍历方法的比较
2011/09/20 PHP
PHP不用递归实现无限分级的例子分享
2014/04/18 PHP
php把大写命名转换成下划线分割命名
2015/04/27 PHP
PHP模拟QQ登录的方法
2015/07/29 PHP
PHP正则表达式入门教程(推荐)
2016/05/18 PHP
jquery 图片预加载 自动等比例缩放插件
2008/12/25 Javascript
防止动态加载JavaScript引起的内存泄漏问题
2009/10/08 Javascript
javascript 操作Word和Excel的实现代码
2009/10/26 Javascript
javascript-简单的日历实现及Date对象语法介绍(附图)
2013/05/30 Javascript
javascript中bind函数的作用实例介绍
2014/09/28 Javascript
jQuery实现DIV层收缩展开的方法
2015/02/27 Javascript
JavaScript操作DOM元素的childNodes和children区别
2015/04/01 Javascript
jquery使整个div区域可以点击的方法
2015/06/24 Javascript
js实现跨域的4种实用方法原理分析
2015/10/29 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
2016/03/04 Javascript
BootStrap中Datetimepicker和uploadify插件应用实例小结
2016/05/26 Javascript
浅谈jQuery中的eq()与DOM中element.[]的区别
2016/10/28 Javascript
Vue.js数据绑定之data属性
2017/07/07 Javascript
浅谈angular2 组件的生命周期钩子
2017/08/12 Javascript
react 创建单例组件的方法
2018/04/26 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
Vue之封装公用变量以及实现方式
2020/07/31 Javascript
JS跨浏览器解析XML应用过程详解
2020/10/16 Javascript
Python深入学习之上下文管理器
2014/08/31 Python
Python脚本暴力破解栅栏密码
2015/10/19 Python
如何在python开发工具PyCharm中搭建QtPy环境(教程详解)
2020/02/04 Python
基于python-pptx库中文文档及使用详解
2020/02/14 Python
JAVA SWT事件四种写法实例解析
2020/06/05 Python
python em算法的实现
2020/10/03 Python
解决margin 外边距合并问题
2019/07/03 HTML / CSS
加拿大健康、婴儿和美容产品在线购物:Well.ca
2016/11/30 全球购物
来自Ocado的宠物商店:Fetch
2018/07/10 全球购物
linux面试题参考答案(4)
2013/01/28 面试题
经典励志格言:每日一句,让你每天充满能量
2019/08/16 职场文书
导游词之张家口
2019/12/13 职场文书