• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Python dekoratorok
 

Python dekoratorok

on

  • 552 views

Veszprem meetup slides from 02/07/2012

Veszprem meetup slides from 02/07/2012

Statistics

Views

Total Views
552
Views on SlideShare
552
Embed Views
0

Actions

Likes
0
Downloads
2
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Python dekoratorok Python dekoratorok Presentation Transcript

    • 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    
    • 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.    
    • 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(arguments): def foo(arguments): ... ... ... def foo(arguments): … foo = decorator(foo) def foo(arguments): … foo = decorator(decorator_args)(something)    
    • 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]   
    • 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    
    • 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): ...   
    • 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    
    • Mire figyeljünk? Minnél jobban módosítunk a viselkedésen, annál  nehezebb debuggolni  nehezebb karbantartani  több a lehetséges hiba    
    • 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.    
    • 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)