Informatika2-2013/Gyakorlat10

A MathWikiből
(Változatok közti eltérés)
(Új oldal, tartalma: „== 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 '''wri…”)
 
1. sor: 1. sor:
 
== Osztályok ==
 
== 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.
+
*Az osztályok egységbe zárnak és a felesleges információt elrejtik.
Osztályok változókból és metódusokból állnak.
+
*Az osztályok metódusokat és változókat tartalmaznak.
 +
*Tekintsünk erre úgy, hogy a kód egy részét (mind tárolókat, mind a függvényeket nézve) összefogjuk.
 +
*Egy objektum egy osztály konkrét megvalósítása.  
 +
 
 +
 
  
 
Saját osztályt így definiálhatunk:
 
Saját osztályt így definiálhatunk:

A lap 2013. április 16., 09:31-kori változata

Osztályok

  • Az osztályok egységbe zárnak és a felesleges információt elrejtik.
  • Az osztályok metódusokat és változókat tartalmaznak.
  • Tekintsünk erre úgy, hogy a kód egy részét (mind tárolókat, mind a függvényeket nézve) összefogjuk.
  • Egy objektum egy osztály konkrét megvalósítása.


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