Как обращаться к функции\методу каждый раз перед вызовом другой?

Имеется ввиду така вещь:
Есть несколько классов, которые унаследованы от одного родителя, который использует некий шаблок (словарь)
И мне нужно каждый раз перед вызовом метода из этого класса вызвать другую функцию, которая будет подставлять нужные мне параметры. в шаблон.
Но банально вписывать каждый раз функцию в теле метода не очень хочется.
Как правильно это сделать?
Проблема в том, что просто менять нужный параметр при инициализации не могу, так как все классы "шарят" этот шаблон и неизвестно в каком порядке и сколько раз будут исользоваться методы.
Заранее спасибо, надеюсь, смог обьяснить суть проблемы :)
  • Вопрос задан
  • 302 просмотра
Решения вопроса 2
@Mintormo
Почитайте про декораторы. Возможно, это то что нужно -habrahabr.ru/post/141411

А конкретнее вам нужен декоратор метода. Это во второй части статьи что указана в ссылке.
Ответ написан
angru
@angru
как вариант в самом базовом классе:

class Foo(object):
    def __getattribute__(self, name):
        attr = super(Foo, self).__getattribute__(name)

        if name in ('abc', 'bar'):
            call_some_function()

        return attr


или если надо применить для всех функций:

class Foo(object):
    def __getattribute__(self, name):
        attr = super(Foo, self).__getattribute__(name)

        if callable(attr):
            call_some_functuon()

        return attr


или так:

class Foo(object):
    def __getattribute__(self, name):
        attr = super(Foo, self).__getattribute__(name)

        return some_decorator(attr) if callable(attr) else attr


правда это совсем не python way, лучше, как уже посоветовали, - декораторами
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы