python-metaprogramozas
Upcoming SlideShare
Loading in...5
×
 

python-metaprogramozas

on

  • 309 views

Python metaprogramozás meetup előadás slidejai.

Python metaprogramozás meetup előadás slidejai.

Statistics

Views

Total Views
309
Views on SlideShare
309
Embed Views
0

Actions

Likes
1
Downloads
1
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-metaprogramozas python-metaprogramozas Presentation Transcript

  • Python metaprogramozás Hercinger Viktor   
  • Mi a metaprogramozás? Program, amely programokat készít és/vagy  módosít. Jelen esetben: objektum futásidejű módosítása.  Dinamikusan felvett member metódusok  Oszály (nem példány) létrehozásának befolyásolása  Függvények viselkedésének befolyásolása  Stb.    
  • Elméleti összefoglalás Metaprogramozás nyelve: meta­nyelv  (metalanguage) Ami az objektum­nyelvet (object language)  módosítja Ha a meta­nyelv és az objektum­nyelv megegyezik:  reflekció!    
  • Attribútum manipulálás getattr(): attribútum, metódus runtime lekérdezése  Objektumtól  Példánytól setattr(): attribútum, metódus runtime módosítása dir(): attribútumok, metódusok neveinek  lekérdezése    
  • Attribútum manipuláslás (példa)    
  • Osztály módosítása Osztályok elsőrendű objektumok  Ugyanúgy kezeljük, mint bármi mást  Attribútum, metódus, ”mindent szabad” elven  setattr() függvény segítségül hívható    
  • Osztályok módosítása (példa) FONTOS: Osztály attribútumát módosítjuk, visszahat(hat) korábbi példányokra is Példányosításkor bindelődik a példányhoz, self a létrehozott osztály lesz.   
  • Osztályok módosítása (példa) FONTOS: Osztály attribútumát módosítjuk, visszahat(hat) korábbi példányokra is Példányosításkor bindelődik a példányhoz, self a létrehozott osztály lesz.   
  • Metaclass Ez az igazi lényege az előadásnak :) Befolyásolja az osztályok létrejöttét.  Dinamikusan attribútumok, metódusok adhatóak  hozzá.  Osztályok regisztrálhatóak.  stb. type­ból származnak    
  • Metaclass (példa)   
  • Dinamikus osztály regisztráció Regisztráljunk be osztályokat egy dictionary­be Tetszőleges helyen létrehozott osztályok eltárolása. Ne kelljen kézzel meghívni egy register() jellegű  függvényt.    
  • Dinamikus class regisztráció (példa)    
  • Más nyelveken C: C preprocesszor, de nem reflekció! C++: Korlátozottan template­ek, C++11 némileg  javít. Java, Ruby, Lisp, stb.: Legtöbb nyelvnek kiterjedt,  Python­hoz hasonló szintű reflekciót támogat.    
  • Mire jó, mire figyeljünk Akárcsak dekorátornál, itt sem célszerű módosítani  az osztály viselkedését.  Minnél több módosítás