Informatika2-2014/Gyakorlat05
A MathWikiből
(Változatok közti eltérés)
8. sor: | 8. sor: | ||
Egy metódust az alábbi módon definiálunk pythonban: | Egy metódust az alábbi módon definiálunk pythonban: | ||
<python> | <python> | ||
− | class | + | class Brick: |
def setx(self, x): | def setx(self, x): | ||
self.x = x | self.x = x | ||
17. sor: | 17. sor: | ||
* Az alábbi módon hozhatunk létre objektumokat és hívhatjuk meg azok metódusait: | * Az alábbi módon hozhatunk létre objektumokat és hívhatjuk meg azok metódusait: | ||
<Python> | <Python> | ||
− | f = | + | f = Brick() |
f.setx(5) | f.setx(5) | ||
f.bar() | f.bar() | ||
− | + | Brick.setx(f,5) | |
− | + | Brick.bar(f) | |
</Python> | </Python> | ||
* Fontos, hogy Pythonban futási időben is változhatnak az osztályhoz tartozó változók: | * Fontos, hogy Pythonban futási időben is változhatnak az osztályhoz tartozó változók: | ||
30. sor: | 30. sor: | ||
* Minden egyes objektum mögött a háttérben létezik egy szótár, ami tartalmazza az osztály elemeit: | * Minden egyes objektum mögött a háttérben létezik egy szótár, ami tartalmazza az osztály elemeit: | ||
<Python> | <Python> | ||
− | g = | + | g = Brick() |
vars(g) | vars(g) | ||
g.__dict__ | g.__dict__ | ||
69. sor: | 69. sor: | ||
== Feladatok == | == Feladatok == | ||
=== 1. feladat === | === 1. feladat === | ||
− | + | Ismételd meg a fenti kódrészleteket. | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
=== 2. feladat === | === 2. feladat === | ||
− | * Írj mátrix osztályt az alábbi | + | * Írj mátrix osztályt az alábbi metódusokkal: |
<python> | <python> | ||
class Matrix: | class Matrix: |
A lap 2014. március 11., 09:56-kori változata
Tartalomjegyzék |
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. Metódusokat tekintsük osztályokon belüli függvényeknek.
- 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.
Egy metódust az alábbi módon definiálunk pythonban:
class Brick: def setx(self, x): self.x = x def bar(self): print self.x
- Itt a lényeges dolog a self változó, ami mindig az első argumentuma a metódusnak. Ez mindig a konkrét megvalósított objektumot jelöli. Tehát külön értékadás nélkül self.x az osztályon (objektumon) belüli x változó, aminek az értékét állítjuk be a setx függvénnyel.
- Az alábbi módon hozhatunk létre objektumokat és hívhatjuk meg azok metódusait:
f = Brick() f.setx(5) f.bar() Brick.setx(f,5) Brick.bar(f)
- Fontos, hogy Pythonban futási időben is változhatnak az osztályhoz tartozó változók:
del f.x
- Itt tehát magát a változót töröljük.
- Minden egyes objektum mögött a háttérben létezik egy szótár, ami tartalmazza az osztály elemeit:
g = Brick() vars(g) g.__dict__
- Konstruktornak hívjuk azt a metódust, ami az objektum létrehozásával együtt hívódik meg:
class Test: def __init__(self): print "Mostmar elhiszed?" x = Test()
- A destruktor konzisztens módon az objektum törlésével együtt hívódik meg.
>>> class A: ... pass ... >>> A.v1 = 10 >>> x=A() # létrehozok két példányt >>> y=A() >>> x.v1 # példányon belül is elérem az osztály szintű változót 10 >>> x.v1 = 34 # itt viszont létrehozok egy példány szintűt aminek a neve felülírja az osztály szintűt >>> y.v1 10 >>> x.v1 34 >>> A.v1 10 >>> A.v1 = 12 # itt az osztályszintű változót változtatjuk >>> x.v1 # mivel felülírtuk a v1-t az x példányban így ezen már nincs hatása 34 >>> y.v1 12 >>> A.v1 12
Feladatok
1. feladat
Ismételd meg a fenti kódrészleteket.
2. feladat
- Írj mátrix osztályt az alábbi metódusokkal:
class Matrix: def const(self,n,x): ... def zeros(self,n): ... def printer(self): ... def set(self,i,j,x): ... def get(self,i,j): ... def hasValue(self,i,j): ... def getLine(self,i): ... def pow(self): ... def product(self,v)
- próbálj meg hibakezelést beépíteni a függvényekbe (try --- except)