Dekorátor pattern   OOP pattern   Meglévő objektum funkciójának bővítése   Nem befolyásolja az eredeti objektum viselke...
Függvény­dekorátor   Funkcionális pattern/eszköz   Függvény viselkedésének módosítása a függvény      módosítása nélkül....
Hogyan működik?   A dekorátor egy függvény   Paramétere is függvény   Visszatérési érték is függvény!                  ...
Hogyan működik?@decorator  @decorator                    @decorator(decorator_args)def something(arguments):  def foo(argu...
Példa: viselkedés módosítása                                          Átalakítja                                   a függv...
Példa: függvényhívás loggolása                                          Nem befolyásolja                                 a...
Példa: függvény megjelölése                                         Nem befolyásolja                                 a füg...
Milyen problémákra célszerű               használni?   unit teszt suite függvényeinek gyűjtése              Alternatíva ...
Mire figyeljünk?   Minnél jobban módosítunk a viselkedésen, annál              nehezebb debuggolni              nehezeb...
Mire figyeljünk?   A ”függvény megjelölése” példa jó ilyen      szempontból              A függvény viselkedése nem vált...
Más nyelvekben   C: nincs közvetlenül lehetőség rá, kerülőkkel      megoldható   C++: template/funktorok (függvényként v...
Upcoming SlideShare
Loading in …5
×

Python dekoratorok

648 views

Published on

Veszprem meetup slides from 02/07/2012

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
648
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Python dekoratorok

  1. 1. Dekorátor pattern OOP pattern Meglévő objektum funkciójának bővítése Nem befolyásolja az eredeti objektum viselkedését  Közvetlenül legalábbis    
  2. 2. Függvény­dekorátor Funkcionális pattern/eszköz Függvény viselkedésének módosítása a függvény  módosítása nélkül. Matematikában elsőrendű függvénynek nevezik. Funkcionális nyelvek régóta használnak hasonló  patterneket.    
  3. 3. Hogyan működik? A dekorátor egy függvény Paramétere is függvény Visszatérési érték is függvény!    
  4. 4. Hogyan működik?@decorator @decorator @decorator(decorator_args)def something(arguments): def foo(arguments): def foo(arguments): ... ... ... def foo(arguments): … foo = decorator(foo) def foo(arguments): … foo = decorator(decorator_args)(something)    
  5. 5. Példa: viselkedés módosítása Átalakítja a függvény viselkedését! def mapper(func): def __wrapper(*args): return [func(arg) for arg in args] return __wrapper @mapper def cube(value): return value ** 3 print cube(1, 2, 3) # >>> [1, 8, 27]   
  6. 6. Példa: függvényhívás loggolása Nem befolyásolja a függvény viselkedését lényegesendef log(func): def __wrapper(*args, **kwargs): print ”Entering function %s” % func.__name__ try: return func(*args, **kwargs) finally: print ”Exiting function %s” % func.__name__ return __wrapper    
  7. 7. Példa: függvény megjelölése Nem befolyásolja a függvény viselkedését sehogyan def mark(function): function.marked = True return function @mark def marked_function(arg): ... if getattr(marked_function, marked, False): ...   
  8. 8. Milyen problémákra célszerű  használni? unit teszt suite függvényeinek gyűjtése  Alternatíva a név alapján történő gyűjtésre Parancskezelő függvények regisztrációja Eseménykezelő függvények regisztrációja Metainformáció hozzáadása függvényhez    
  9. 9. Mire figyeljünk? Minnél jobban módosítunk a viselkedésen, annál  nehezebb debuggolni  nehezebb karbantartani  több a lehetséges hiba    
  10. 10. Mire figyeljünk? A ”függvény megjelölése” példa jó ilyen  szempontból  A függvény viselkedése nem változik  Minden, ami igaz volt a függvényre dekorálás előtt,  az igaz utána is.    
  11. 11. Más nyelvekben C: nincs közvetlenül lehetőség rá, kerülőkkel  megoldható C++: template/funktorok (függvényként viselkedő  objektumok) Java: dekorátor pattern, annotáció (viselkedés  módosítás nélkül)    

×