[python] Dekorovana funkce

Jonas Fiala dobrouskobrou na seznam.cz
Čtvrtek Červenec 1 12:49:22 CEST 2010


Ahoj,

reaguji na e-mail M. Blazika ohledne detekce dekoratoru, me funguje tento postup (upravil jsem ukazku python kodu):

def deco(func):
    def wrap(*args, **kwargs):
      return func(*args, **kwargs)
    return wrap

def another_deco(func):
    def wrap(*args, **kwargs):
      return func(*args, **kwargs)
    return wrap

def test1():
    return 'test1'

@deco
def test2():
    return 'test2'

@another_deco
def test3():
    return 'test3'

def isDecorated(fce, dec):
    if type(fce.func_closure) == tuple:
        my = dec(lambda x: x)
        if fce.func_code == my.func_code:
            return True
    return False

if __name__ == '__main__':
    lst = [test1, test2, test3]
    for function in lst:
        if isDecorated(function, deco):
            print function.__name__, 'YES'
        else:
            print function.__name__, 'NO'


--
Jonas Fiala


Další informace o konferenci Python