Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Узнать что обернуто в декоратор


Автор: shupg 2.11.2009, 15:46
Проблема в том, что надо знать имя функции и ее переменных в декораторе overload. Как быть?

Код

@accept(int, int, int)
def _myfunc1(a,b,c=8)
    print a,b,c

@accept(int, int ,string)
def _myfunc2(a,b,c='q')
    print a,b,c

@overload((_myfunc1, _myfunc2))
def myfunc(*args, **kvargs):
    pass



Код

myfunc(1,2,'')


Описание декораторов:
Код

def accepts(*d_args):
    def decorate_func(f):
        def accepts_decorate(*args):
            for item in zip(args, d_args):
                verify(isinstance(*item), 'Function %s should accept %s, not %s' % (f.func_name, d_args, [type(a) for a in args]))
            return f(*args)
        return accepts_decorate
    return decorate_func

def overload_function(overload_functions):
    def decor_generator(f):
        def overload_decorate(*args, **kvargs):
            print overload_functions
            # здесь проверки какую функцию все-таки юзать и вызов
        return overload_decorate
    return decor_generator


Печатает:
Код

(<function accepts_decorate at 0x00C58870>, <function accepts_decorate at 0x00C588F0>)


Хочется иметь столько инфы как если бы декоратор overload_function был вызван первый

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)