0
私はOperatorsという名前のクラスを持っていますが、このクラスには機能のバースがあります。各機能の実行時間をテストしたい。コードは以下のようになります。ステートメントの装飾方法
Class Operators(object):
def A(self):
"""do something"""
def B(self):
"""do something"""
Class EvaluateWrap(object):
def __init__(self):
self.op = Operator()
def Evaluate(self):
def _Decorator(f):
functool.wrap(f)
def Wrap(*args, **kwargs):
# time_start
f(*args, **kwargs)
# time end, elapsed
return Wrap
return _Decorator
def Run(self):
@self.Evaluate()
op.A()
@self.Evaluate()
op.B()
私はデコレータが唯一のクラスと機能のために使用していますので、私は何をすべき見つける以外にもまず第一に、self.Evaluateは動作しないでしょうか?どうもありがとう。
クールですが、私がすべて測定したいメソッドはインターフェースなので、デコレータを追加することはできません。私ができることはEvaluateWrapクラスだけです。 – bingo
ステートメントを関数に変換するのは簡単です。あなたの場合、 'def _run_A(self):self.op.A()'とdef_run_B(self):self.op.B() 'を定義し、それらを' Run'から呼び出すことができます。デコレータが状態を必要とする場合(例えば、多くの呼び出しで時間が累積しているなど)、 'def __call __(self、method):...'を使用して 'timeit'を呼び出しメソッドとして別の' Timer'クラスを作成します。 'timed'関数内でobjごとに' def timed(obj、* args、** kw) 'の積算時間を使って各メソッドのオブジェクトごとの時間を追跡することさえできます。 – Neapolitan