Informatika2-2013/Gyakorlat10

A MathWikiből
A lap korábbi változatát látod, amilyen Rpalovics (vitalap | szerkesztései) 2013. április 16., 10:27-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)

Osztályok

Az osztályok egységbe zárnak és a felesleges információt elrejtik. Például a file objektumaink file típusúak, meg van bennük írva a write(), stb metódus, de el van rejtve elõlünk a mûködése, mert nem kell tudnunk hogy van megvalósítva ahhoz hogy használni tudjuk. Osztályok változókból és metódusokból állnak.

Saját osztályt így definiálhatunk:

class MyClass:
    valt = 5
 
    def fv(self):
        return self.valt * 2

Itt a valt változó az osztályhoz tartozik, így elérhetjük például """MyClass.valt"""-al. Viszont, ha a fv-t próbáljuk hasonlóképpen elérni hibába ütközünk. Ez azért van, mert az osztályt nem közvetlenül szokták használni, hanem példányosítják:

x = MyClass()        # létrehozunk egy MyClass típusú objektumot
x.fv()                # így már menni fog a fv metódus

Így definiált objektumokhoz késõbb is hozzávehetünk még adattagokat:

x = MyClass()
x.ujValt = "Valami"
print x.ujValt
#print MyClass.ujValt ez nem menne, mert az ujValt az x objektumhoz tartozik és nem az osztályához

Osztályoknak léteznek speciális metódusai, ezekrõl részletesebben következõ gyakorlaton lesz szó, most nézzük csak az __init__-et. Ez az a függvény, ami meghívódik amikor létrehozunk egy ilyen típusú objektumot, azaz pl az x = MyClass() parancsnál ez hívódik. Aki nem hiszi próbálja lefuttatni ezt:

class Test:
    def __init__(self):
        print "Mostmar elhiszed?"
 
x = Test()

Mi ez a self amit mindig megadunk a metódusoknak? Ezzel a változóval hivatkozhatunk magára az objektumra amin meghívtuk az adott metódust, példából jobban érthetõ:

class Pelda:
    def fv(self, szam):
        self.v = szam
 
x = Pelda()
y = Pelda()
x.fv(5)
y.fv(15)
 
print x.v
print y.v
 
# Ez a fv metódus olyan volt, mintha már az x létrehozása után azt írtam volna, hogy x.v = 5

Amint látjátok a self változót nem kell nekünk átadnunk amikor meghívjuk a metódusokat, ez automatikusan megtörténik. (Pelda.fv(x, 5) <=> x.fv(5))

Ha az __init__ függvény nem csak a self-et, hanem más változókat is kap, akkor ezeket is meg kell adnunk, pl:

class Test:
    def __init__(self, szam):
        self.x = szam
 
x = Test(15)
print x.x

5. Osztály feladat - Telefonkönyv

Egészítsétek ki a következõ osztályt, hogy egy ilyen objektum létrehozásakor megadhassunk neki két listát amikben nevek és telefonszámok szerepelnek, ezeket tárolja el adattagként. Valamint a hozzavesz metódusa vegyen hozzá egy nevet és a hozzá tartozó telefonszámot a listákhoz.

class Telefonkonyv:
    def __init__(self, nevek, telefonszamok):
        pass
 
    def hozzavesz(self, nev, telefonszam):
        pass

A pass kulcsszó csak azért van ott, mert pythonban minden blokkban kell lennie legalább egy parancsnak. A pass nem csinál semmit csak kitölti a teret.

Személyes eszközök