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

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

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系统来说

时间: 2024-10-29 20:01:35

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

动态获取当前运行的类名、函数名

1.只取函数名 1 import sys 2 def getFunctionName(): 3 return sys._getframe(1).f_code.co_name 4 5 def run(): 6 print 'functionname:', getFunctionName() 7 8 if __name__ == "__main__": 9 run() 2.取类名.函数名 1 import inspect 2 def get_current_function_name():

python获得类名和函数名的方法

#!/usr/bin/python3 import sys class Point: def __init__( self, x=0, y=0): self.x = x self.y = y def __del__(self): class_name = self.__class__.__name__ fun_name = sys._getframe().f_code.co_name print (fun_name,class_name, "destroyed") p = Point(

python动态获取对象的属性和方法 (转载)

首先通过一个例子来看一下本文中可能用到的对象和相关概念. #coding:utf-8 import sys def foo():pass class Cat(object): def __init__(self, name='Kitty'): self.name = name def sayHi(self): print self.name, 'says Hi!' cat = Cat() print Cat.sayHi print cat.sayHi 有时候我们会碰到这样的需求,需要执行对象的某

python动态获取对象的属性和方法

http://blog.csdn.net/kenkywu/article/details/6822220首先通过一个例子来看一下本文中可能用到的对象和相关概念.01     #coding: UTF-802     import sys #  模块,sys指向这个模块对象03     import inspect04     def foo(): pass # 函数,foo指向这个函数对象05      06     class Cat(object): # 类,Cat指向这个类对象07    

Java运行时获取当前运行代码类名、方法名

/*    * 1.获取当前运行代码的类名,方法名,行号,主要是通过java.lang.StackTraceElement类 *  * 2. 获取调用者.当前方法名 *   [1]获得调用者的方法名, 同new Throwable *         String _methodName = new Exception().getStackTrace()[1].getMethodName(); *   [0]获得当前的方法名, 同new Throwable *         String _t

JAVA 获取类名,函数名

获取以下获取方法所在函数的相关信息 1.获取当前函数名:Thread.currentThread().getStackTrace()[1].getMethodName(); 2.获取当前类名:Thread.currentThread().getStackTrace()[1].getClassName(); 3.获取当前类的文件名:Thread.currentThread().getStackTrace()[1].getFileName(); 获取调用方法的所在函数的相关信息 1.获取当前函数名:

标示符(变量名、类名、函数名、常量名等)命名规则

由26个英文字母大小写,数字:0-9,符号:_.$组成. 规则: 1.数字不可以开头 2.不可以使用关键字 例如:class就不可以,因为class是关键字. 3.不可以包含“_.$”以外的特殊符号,例如:“DemoTest”就不可以,其中的空格就是特殊符 号. 一些常用命名规则: 包名:多单词组成时所有字母都小写. 例如:xxxyyyzzz    类名接口名:多单词组成时,所有单词的首字母大写.例如:XxxYyyZzz变量名和函数名:多单词组成时,第一个单词首字母小写,

【Python】动态获取python类名、函数名&多线程

import time import random import threading import inspect def get_current_function_name(): return inspect.stack()[1][3] class Inclass: def __init__(self): print 'Inclass 初始化' def execIn(self,i): rand = int(random.random() * 10) print i,'[%s.%s]---%s-

获取当前运行的类名或者方法

public static String getCurrentMethodName() { int level = 1; StackTraceElement[] stacks = new Throwable().getStackTrace(); String methodName = stacks[level].getMethodName(); return methodName; } public static String getCurrentClassName() { int level