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 04 Python
python中hashlib模块用法示例
Oct 30 Python
对Python模块导入时全局变量__all__的作用详解
Jan 11 Python
Django多数据库的实现过程详解
Aug 01 Python
python3 tcp的粘包现象和解决办法解析
Dec 09 Python
Pytorch 多块GPU的使用详解
Dec 31 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
Feb 10 Python
django实现将后台model对象转换成json对象并传递给前端jquery
Mar 16 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
Mar 24 Python
4行Python代码生成图像验证码(2种)
Apr 07 Python
Django获取model中的字段名和字段的verbose_name方式
May 19 Python
python+selenium自动化实战携带cookies模拟登陆微博
Jan 19 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
经典的星际争霸,满是回忆的BGM
2020/04/09 星际争霸
php数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
JQuery小知识
2010/10/15 Javascript
StringTemplate遇见jQuery冲突的解决方法
2011/09/22 Javascript
查看源码的工具 学习jQuery源码不错的工具
2011/12/26 Javascript
js URL参数的拼接方法比较
2012/02/15 Javascript
Javascript new Date().valueOf()的作用与时间戳由来详解
2013/04/24 Javascript
JS中如何判断传过来的JSON数据中是否存在某字段
2014/08/18 Javascript
node.js中的buffer.Buffer.isEncoding方法使用说明
2014/12/14 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
关于JavaScript 原型链的一点个人理解
2016/07/31 Javascript
canvas实现流星雨的背景效果
2017/01/13 Javascript
关于axios返回空对象的问题解决
2017/04/04 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
详解关于element el-button使用$attrs的一个注意要点
2018/11/09 Javascript
vue axios请求频繁时取消上一次请求的方法
2018/11/10 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
跟老齐学Python之深入变量和引用对象
2014/09/24 Python
Python中的默认参数实例分析
2018/01/29 Python
浅析python打包工具distutils、setuptools
2018/04/20 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
2018/05/30 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
2019/10/17 Python
使用python实现飞机大战游戏
2020/03/23 Python
CSS3 函数技巧 用css 实现js实现的事情(clac Counters Tooltip)
2017/08/15 HTML / CSS
html5 canvas实现给图片添加平铺水印
2019/08/20 HTML / CSS
优衣库美国官网:UNIQLO美国
2018/04/14 全球购物
戴尔英国翻新电脑和电子产品:Dell UK Refurbished Computers
2019/07/30 全球购物
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
介绍一下Make? 为什么使用make
2013/12/08 面试题
大学生演讲稿范文
2014/01/11 职场文书
2014年学习全国道德模范事迹思想汇报
2014/09/15 职场文书
党员自我评价范文2015
2015/03/03 职场文书
比较node.js和Deno
2021/04/27 Javascript
win10音频服务未响应怎么解决?win10音频服务未响应未修复的解决方法
2022/08/14 数码科技