Уведомления

Группа в Telegram: @pythonsu

#1 Март 10, 2010 00:43:18

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

Забрать объект декорированной ф-и, по ее имени в строке

def log(func):
def wraper(*a, **kw):
return func(*a, **kw)
return wraper

@log
def f():
print 'f'


print locals()['f'] # - выдаст <function wraper at 0x00CBF3F0>. Как добраться до объекта реальной ф-и f?



Офлайн

#2 Март 10, 2010 03:48:11

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Забрать объект декорированной ф-и, по ее имени в строке

ostroglaz
Имеете ввиду что-то типа этого

def log(func):
def wraper(*a, **kw):
return func(*a, **kw)
return wraper

@log
def f():
print 'f'

a = locals()['f']
a()
?
скорее так:
from functools import wraps
def log(func):
@wraps(func)
def wraper(*a, **kw):
return func(*a, **kw)
return wraper

@log
def f():
print 'f'

print locals()['f']



Отредактировано (Март 10, 2010 03:50:25)

Офлайн

#3 Март 10, 2010 13:19:58

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

Забрать объект декорированной ф-и, по ее имени в строке

Есть еще один вариант прикрепить f, к wraper как аттрибут.



Офлайн

#4 Март 11, 2010 19:41:15

bazooka
От:
Зарегистрирован: 2009-04-12
Сообщения: 165
Репутация: +  0  -
Профиль   Отправить e-mail  

Забрать объект декорированной ф-и, по ее имени в строке

>>> f.func_closure[0].cell_contents
<function f at 0x02BD3770>



Отредактировано (Март 11, 2010 19:41:34)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version