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

したがって、上記のような出力を取得するには、printステートメントに何を追加する必要がありますか。

ありがとうございました

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 に答える