私たちは、別の社内チームが提供するライブラリを使用します。Python:ライブラリ内のすべての関数をラップする
from externalTeam import dataCreator
datacreator.createPizza()
datacreator.createBurger()
datacreator.createHotDog()
最近、特定の状況で実行するために、1つの方法が1分以上かかることがわかりました。これをデバッグするには、このメソッドの呼び出しのたびにコードに入り、タイムアウトを追加する必要がありました。後知恵で
import time
from externalTeam import dataCreator
start = time.clock()
datacreator.createPizza()
stop = time.clock()
print "It took %s seconds to perform createPizza" % (str(stop-start))
我々はすべての場所でcreatePizzaを呼んでいる、と私たちはcreatePizza自体(アナロジーはここで少しを打破するために開始された)をコントロールしていないので、それはです。むしろ1つの場所でcreatePizzaを呼び出し、その周りにタイマーを追加できるようにしたいと思います。これを達成するための私の最初の考えは、自分のラッパークラスですべてのメソッドをラップすることです。それはしかしDRYの反対だ、といつでも彼らは私もあることをラップするために私たちのライブラリを更新する必要があると思います別のメソッドを追加します。私が欲しいもの
import time
from externalTeam import dataCreator
def createPizza(self):
start = time.clock()
datacreator.createPizza()
stop = time.clock()
print "It took %s seconds to perform createPizza" % (str(stop-start))
def createBurger(self):
start = time.clock()
datacreator.createPizza()
stop = time.clock()
print "It took %s seconds to perform createBurger" % (str(stop-start))
def createHotDog(self):
start = time.clock()
datacreator.createPizza()
stop = time.clock()
print "It took %s seconds to perform createHotDog" % (str(stop-start))
は常に周りのすべての数行のコードを実行するための方法ですdataCreatorから呼び出されている関数です。そのメソッドを動的に定義することができる、またはむしろ定義されていない中間クラスを介して、それを行うにはいくつかの方法が必要です。
デコレータを見てください。 – utdemir
私たちはメソッドを使って関数やクラスについて話していますか? – tjollans
私はデコレータについて知っています。私は何を飾るのですか? createPizzaとcreateBurgerはその側の関数です。 – Nathan