0
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

那么我应该在打印语句中添加什么来获得类似上面的输出。

谢谢

4

1 回答 1

3

你可以用inspect.getargspec这个。

例如:

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
于 2013-03-14T13:59:13.440 回答