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计数排序和基数排序算法实例
Apr 25 Python
pip 错误unused-command-line-argument-hard-error-in-future解决办法
Jun 01 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
May 04 Python
Python3.5文件读与写操作经典实例详解
May 01 Python
Python参数类型以及常见的坑详解
Jul 08 Python
如何基于python实现画不同品种的樱花树
Jan 03 Python
如何在 Django 模板中输出 "{{"
Jan 24 Python
TensorFlow加载模型时出错的解决方式
Feb 06 Python
基于pytorch padding=SAME的解决方式
Feb 18 Python
PyTorch中model.zero_grad()和optimizer.zero_grad()用法
Jun 24 Python
pandas取dataframe特定行列的实现方法
May 24 Python
Python多个MP4合成视频的实现方法
Jul 16 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模板引擎SMARTY
2006/10/09 PHP
PHP中include()与require()的区别说明
2010/03/10 PHP
php天翼开放平台短信发送接口实现方法
2014/12/22 PHP
PHP实现支持加盐的图片加密解密
2016/09/09 PHP
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
js获取视频时长代码
2014/04/10 Javascript
js控制当再次点击按钮时的间隔时间
2014/06/03 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
2015/02/28 Javascript
JS控制伪元素的方法汇总
2016/04/06 Javascript
javascript中sort排序实例详解
2016/07/24 Javascript
Javascript数组中push方法用法分析
2016/10/31 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
2016/11/03 Javascript
在网页中插入百度地图的步骤详解
2016/12/02 Javascript
JQuery实现动态操作表格
2017/01/11 Javascript
解决nodejs的npm命令无反应的问题
2018/05/17 NodeJs
浅谈react-router@4.0 使用方法和源码分析
2019/06/04 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
Python实现全局变量的两个解决方法
2014/07/03 Python
python对字典进行排序实例
2014/09/25 Python
python3去掉string中的标点符号方法
2019/01/22 Python
使用Windows批处理和WMI设置Python的环境变量方法
2019/08/14 Python
关于h5中的fetch方法解读(小结)
2017/11/15 HTML / CSS
悦木之源美国官网:Origins美国
2016/08/01 全球购物
巴西女装购物网站:Eclectic
2018/04/24 全球购物
飞利浦美国官网:Philips美国
2020/02/28 全球购物
班组长工作职责
2013/12/25 职场文书
期终自我鉴定
2014/02/17 职场文书
法英专业大学生职业生涯规划范文:衡外情,量己力!
2014/09/23 职场文书
党员批评与自我批评发言材料
2014/10/14 职场文书
行为规范主题班会
2015/08/13 职场文书
2019最新校园运动会广播稿!
2019/06/28 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js
MySQL索引失效场景及解决方案
2022/07/23 MySQL
华为HarmonyOS3.0强在哪? 看看鸿蒙3.0这7个小功能
2023/01/09 数码科技