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ó...
Elméleti összefoglalás   Metaprogramozás nyelve: meta­nyelv      (metalanguage)   Ami az objektum­nyelvet (object langua...
Attribútum manipulálás   getattr(): attribútum, metódus runtime lekérdezése              Objektumtól              Példá...
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            ...
Osztályok módosítása (példa)                  FONTOS: Osztály attribútumát                  módosítjuk, visszahat(hat)    ...
Osztályok módosítása (példa)                  FONTOS: Osztály attribútumát                  módosítjuk, visszahat(hat)    ...
Metaclass   Ez az igazi lényege az előadásnak :)   Befolyásolja az osztályok létrejöttét.              Dinamikusan attr...
Metaclass (példa)         
Dinamikus osztály regisztráció   Regisztráljunk be osztályokat egy dictionary­be   Tetszőleges helyen létrehozott osztál...
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.   Jav...
Mire jó, mire figyeljünk   Akárcsak dekorátornál, itt sem célszerű módosítani      az osztály viselkedését.             ...
Upcoming SlideShare
Loading in …5
×

python-metaprogramozas

349 views

Published on

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

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

No Downloads
Views
Total views
349
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
2
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

python-metaprogramozas

  1. 1. Python metaprogramozás Hercinger Viktor   
  2. 2. 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.    
  3. 3. 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ó!    
  4. 4. 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    
  5. 5. Attribútum manipuláslás (példa)    
  6. 6. 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ó    
  7. 7. 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.   
  8. 8. 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.   
  9. 9. 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    
  10. 10. Metaclass (példa)   
  11. 11. 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.    
  12. 12. Dinamikus class regisztráció (példa)    
  13. 13. 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.    
  14. 14. 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    

×