Informatika2-2015/Eloadas 4 Python-4 Referenciak, Objektumok

A MathWikiből
A lap korábbi változatát látod, amilyen Csirke (vitalap | szerkesztései) 2015. március 4., 02:37-kor történt szerkesztése után volt.
(eltér) ←Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

Referenciák, objektumok

Alapvető fogalmak

Emlékezzünk vissza két előadással korábban amit a mutable típusokról mondtunk. Hogy a listáknál/szótáraknál előfordulhat pl. hogy két változó ugyanarra a listára vonatkozik, ha módosítom az egyiket, a másik is módosul.

link

Ezt értelmezhetjük úgy, hogy van egy lista, ami létezik valahol a számítógép memóriájában, és több változó is ugyanara a listára hivatkozik. Bevezetünk néhány szakkifejezést, ami segít ezeket a fogalmakat kezelni.

Egy ilyen dolog, ami a memóriában valahol létezik, egy objektum. Az objektumnak van egy típusa, vagy más szóval osztálya, ami megmondja, hogy az az objektum éppen lista, szótár, vagy valami más. A konkrét változók amik erre az objektumra hivatkoznak, azok referenciák, és úgy mondhatjuk, hogy erre az objektumra mutatnak.

Az objektumnak a legfontosabb, alapvető, tulajdonsága az osztálya. Ez mondja meg, hogy milyen dolgokat tudunk vele tenni. Például, hogy a listának ki tudjuk venni a valahányadik elemét a szögletes zárójellel, vagy hogy a szótárnak van egy has_key() nevű metódusa, amivel meg lehet nézni hogy egy bizonyos kulcs szerepel-e benne. Hasonlóan egy modulhoz, egy osztály is alapvetően kétfajta elemet tartalmazhat: változókat, ezeket hívhatjuk az osztály tagváltozóinak, és függvényeket, ezeket hívhatjuk az osztály metódusainak.

Nézzünk egy példát:

link

Ebben az esetben létrehoztam a datetime.date osztály egy példányát, egy objektumot, ami el tud tárolni egy dátumot, ebben az esetben a mai dátumot. A ma nevű változó egy referencia, ami erre az objektumra mutat. Megtudható a datetime.date osztály dokumentációjából, hogy ennek az osztálynak van pl. egy year nevű tagváltozója, és egy weekday() nevű metódusa, így ezek elérhetőek a referencián keresztül.

Itt mindjárt láthatunk is egy fontos különbséget a modulokhoz képest. A modulnál a bele tartozó függvények meghívásához csak a modulra volt szükségem, azt mondhattam a math modulnál hogy math.sin(1). Azonban a datetime.date osztályra nem mondhatom azt hogy datetime.date.weekday(), szükségem van az objektum egy példányára, hogy a metódust azon tudjam meghívni.

Vannak olyan függvények is, amiket magán az osztályon lehet hívni, és nem egy példányon. Pythonban ezeket "class method"-nek és "class attribute"-nak hívják, ellenben azokkal amiket az előbb említettem, amiket pontosabban "instance method"-nek és "instance attribute"-nak hívnak. Ezeket az "osztálymetódus"-okat akkor használják, ha valamely függvény/változó szervesen kapcsolódik az adott osztályhoz, de nem egy konkrét példányhoz. Lényegében úgy érhetőek el, mint ha lenne az osztály nevével egy azonos nevű modul is, és abban lennének. Itt példa a datetime.date.min, ami a lehetséges legkisebb dátum amit a datetime.date osztály tárolni tud: ez az érték az osztály minden példányára ugyanaz, és szükségünk lehet már akkor rá amikor még nem hoztunk létre egy példányt se, ezért az osztályhoz tartozik, nem az egyes objektumokhoz. De ez csak plusz lehetőség, továbbra is elérhető az objektumokon keresztül is, pl. a korábbi példában a ma.min is működne, és ugyanezt adná. Alapból ha metódusról beszélünk, az "instance method"-öt értjük alatta.

Személyes eszközök