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. Elméleti összefoglalás
Metaprogramozás nyelve: metanyelv
(metalanguage)
Ami az objektumnyelvet (object language)
módosítja
Ha a metanyelv és az objektumnyelv megegyezik:
reflekció!
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. 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. 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.
typeból származnak
11. Dinamikus osztály regisztráció
Regisztráljunk be osztályokat egy dictionarybe
Tetszőleges helyen létrehozott osztályok eltárolása.
Ne kelljen kézzel meghívni egy register() jellegű
függvényt.
13. Más nyelveken
C: C preprocesszor, de nem reflekció!
C++: Korlátozottan templateek, C++11 némileg
javít.
Java, Ruby, Lisp, stb.: Legtöbb nyelvnek kiterjedt,
Pythonhoz hasonló szintű reflekciót támogat.
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