如何使用装饰器检索函数中传递的参数的名称

时间:2013-03-14 13:56:30

标签: python parameters decorator

import sys
def entryExit(f):
    def new_f(self,*args):
        print "Entering", f.__name__,self.__class__.__name__ 
        f(self,*args)
        print "Exited", f.__name__,self.__class__.__name__
    return new_f


class A:
    @entryExit
    def move(self,g,h):
        print "hello"
        print g,h           

a=A()
a.move(5,7)

以上代码输出

Entering move A
hello
5 7
Exited move A

我能够检索方法名称以及使用装饰器定义它的类。但我无法在运行时检索方法参数的名称。

基本上我需要像这样的输出

Entering move A g,h
hello
5 7
Exited move A g,h

那么我应该在print语句中添加什么来获得如上所述的输出。

谢谢

1 个答案:

答案 0 :(得分:3)

您可以使用inspect.getargspec

e.g:

import sys
import inspect
def entryExit(f):
    def new_f(self,*args):
        print "Entering", f.__name__,self.__class__.__name__,inspect.getargspec(f).args[1:]
        f(self,*args)
        print "Exited", f.__name__,self.__class__.__name__
    return new_f


class A:
    @entryExit
    def move(self,g,h):
        print "hello"
        print g,h           

a=A()
a.move(5,7)

结果:

Entering move A ['g', 'h']
hello
5 7
Exited move A