Подтвердить что ты не робот

Вызов метода перехвата в Python

Я реализую веб-службу RESTful на python и хотел бы добавить некоторые функции ведения журнала QOS, перехватывая вызовы функций и регистрируя их время выполнения и т.д.

В основном я думал о классе, из которого могут наследовать все другие сервисы, который автоматически переопределяет реализации метода по умолчанию и обертывает их в функцию журнала. Какой лучший способ достичь этого?

4b9b3361

Ответ 1

Что-то вроде этого? Это подразумевает добавление декоратора к вашему методу (вы также можете сделать явный декоратор на основе этого, если вы этого предпочтете):

class Foo(object):
    def __getattribute__(self,name):
        attr = object.__getattribute__(self, name)
        if hasattr(attr, '__call__'):
            def newfunc(*args, **kwargs):
                print('before calling %s' %attr.__name__)
                result = attr(*args, **kwargs)
                print('done calling %s' %attr.__name__)
                return result
            return newfunc
        else:
            return attr

когда вы сейчас попробуете что-то вроде:

class Bar(Foo):
    def myFunc(self, data):
        print("myFunc: %s"% data)

bar = Bar()
bar.myFunc(5)

Вы получите:

before calling myFunc
myFunc:  5
done calling myFunc

Ответ 2

Что делать, если вы пишете декоратор на каждой функции? Вот пример на python wiki.

Используете ли вы какой-либо веб-фреймворк для выполнения своего веб-сервиса? Или вы все делаете вручную?