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深入学习之闭包
Aug 31 Python
Python实现字符串格式化输出的方法详解
Sep 20 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
Oct 23 Python
Python实现堡垒机模式下远程命令执行操作示例
May 09 Python
Pycharm运行加载文本出现错误的解决方法
Jun 27 Python
Python实现蒙特卡洛算法小实验过程详解
Jul 12 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
Aug 09 Python
Python3实现配置文件差异对比脚本
Nov 18 Python
python创建ArcGIS shape文件的实现
Dec 06 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
Sep 03 Python
Python 中Operator模块的使用
Jan 30 Python
解决Tkinter中button按钮未按却主动执行command函数的问题
May 23 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
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
2014/08/15 PHP
PHP模块memcached使用指南
2014/12/08 PHP
PHP 中提示undefined index如何解决(多种方法)
2016/03/16 PHP
Windows 下安装 swoole 图文教程(php)
2017/06/05 PHP
javascript Array.sort() 跨浏览器下需要考虑的问题
2009/12/07 Javascript
读jQuery之二(两种扩展)
2011/06/11 Javascript
windows系统下简单nodejs安装及环境配置
2013/01/08 NodeJs
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
js实现星星打分效果的方法
2020/07/05 Javascript
JavaScript中const、var和let区别浅析
2016/10/11 Javascript
JS重载实现方法分析
2016/12/16 Javascript
详解JavaScript中return的用法
2017/05/08 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
2017/08/28 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
2018/01/16 Javascript
微信小程序访问豆瓣电影api的实现方法
2019/03/31 Javascript
RxJS在TypeScript中的简单使用详解
2020/04/13 Javascript
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
JS图片预加载三种实现方法解析
2020/05/08 Javascript
js实现拾色器插件(ColorPicker)
2020/05/21 Javascript
利用JavaScript为句子加标题的3种方法示例
2021/01/05 Javascript
[02:11]2016国际邀请赛中国区预选赛最美TA采访现场玩家
2016/06/28 DOTA
Python使用正则匹配实现抓图代码分享
2015/04/02 Python
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
Python中random模块用法实例分析
2015/05/19 Python
Python实现Event回调机制的方法
2019/02/13 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
图文详解Django使用Pycharm连接MySQL数据库
2019/08/09 Python
python实现的生成word文档功能示例
2019/08/23 Python
Python 解决火狐浏览器不弹出下载框直接下载的问题
2020/03/09 Python
python Canny边缘检测算法的实现
2020/04/24 Python
奥地利领先的在线药房:SHOP APOTHEKE
2019/10/07 全球购物
医院信息公开实施方案
2014/05/09 职场文书
北京英语导游词
2015/02/12 职场文书
入党介绍人意见怎么写
2015/06/03 职场文书
left join、inner join、right join的区别
2021/04/05 MySQL
详解Django中 render() 函数的使用方法
2021/04/22 Python