Мы используем библиотеку, предоставленную другой внутренней командой. (Шаткая аналогия начинается сейчас)
from externalTeam import dataCreator
datacreator.createPizza()
datacreator.createBurger()
datacreator.createHotDog()
Недавно мы обнаружили, что их метод в определенных ситуациях занимал более минуты. Чтобы отладить это, я должен был зайти в наш код и добавить таймауты вокруг каждого вызова этого метода.
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 (аналогия начинает немного ломаться здесь). Я бы предпочел просто вызвать 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. Должен быть какой-то способ сделать это через промежуточный класс, чьи методы могут быть определены динамически - или, скорее, оставлены неопределенными, верно?