zjistit, jestli je dunkce dekorovana, nebo ne, asi obecne poresit nepujde, protoze dekorator muze provadet vselico - muze funkci obalit jinou funkci, nebo funkci jen pridat atribut.
pokud budeme ale predpokladat, ze dekorator vzdy obali puvodni funkci nejakym wrapperem, stalo by za to povrtat se v func_closure (__closure__ v py >= 2.6) atributu funkce, jak naznacuju vyse. vypada to totiz, ze pokud dekorator vyrobi funkci f2 obalenim funkce f1 funkci wrapper, pak plati, ze - f2 is wrapper - f.func_closure[0].cell_contents is f1 On Jun 23, 1:07 pm, Martin Blažík <[email protected]> wrote: > Tu ukazku jsem si ted vycucal z prstu, aby jen bylo videt co hledam. > Dekorat nemusi byt muj, a ani jinej dekorator nechci znovu dekorovat :) > Tim padem do obalovane funkce nic vlozeno nebude. Predstavoval jsem si, > ze to zjistim nejakym zpusobem pres reflexi, ale jak jsm psal, nemuzu > natrefit na ty spravne atributy. > > lachtan > > Dne 23.6.2010 9:30, Petr Messner napsal(a): > > > > > Pokud se jedn o tv j vlastn dekor tor, m e vracen funkci nastavit > > nejak atribut, jeho p tomnost pak m e testovat. > > > Mimochodem ten dekor tor co uv d nen nejlep , proto e p episuje > > n zev a dokumentaci p vodn funkce. T m by to tak mo n lo zjistit. > > > Petr Messner > > > 23.6.2010 v 9:14, Martin Bla k <[email protected]>: > > >> us k, > >> nem te n kdo p edstavu, jak zjistit za b hu programu, zda funkce i > >> metoda byla obalena konkr tn m dekor torem? M jme tento uk zkov k d > > >> def decorator(func): > >> def wrap(*args, **kwargs): > >> return func(*args, **kwargs) > >> return wrap > > >> def test1(): > >> return 'test1' > > >> @decorator > >> def test2(): > >> return 'test2' > > >> @decorator > >> def test3(): > >> return 'test3' > > >> a j bych r d m l funkci > > >> def isDecorated(function, decor): > >> pass > > >> kter vr t True, pokud function vznikla tak, e n jak jin funkce > >> (nez le na tom jak ) byla obalena dekor torem decor. Mohl bych napsat > >> t eba > > >> lst = [test1, test2, test3] > >> for function in lst: > >> if isDecorated(function, decorator): > >> print function.__name__, 'YES' > >> else: > >> print function.__name__, 'NO' > > >> Sna il jsem se o tom n co naj t na inetu i jsem provedl hromadu > >> testov n za pou t r zn ch atributu funkce, ale po d nem u naj t > >> e en . > > >> Za v echny n pady p edem d k > >> lachtan > >> _______________________________________________ > >> Python mailing list > >> [email protected] > >>http://www.py.cz/mailman/listinfo/python > > _______________________________________________ > > Python mailing list > > [email protected] > >http://www.py.cz/mailman/listinfo/python _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
