Informatika2-2012/Gyakorlat10

A MathWikiből
(Változatok közti eltérés)
(örökítsd az osztályt egy másikban, nézd meg miket érsz él benne, miket tudsz felülírni, mi lesz az eredménye)
(örökítsd az osztályt egy másikban)
46. sor: 46. sor:
 
* nézd meg miket érsz él benne, miket tudsz felülírni, mi lesz az eredménye
 
* nézd meg miket érsz él benne, miket tudsz felülírni, mi lesz az eredménye
 
<python>
 
<python>
 +
class Fa:
 +
    v1 = 10
 +
    v2 = []
 +
 +
    def add_v2(self, i):
 +
        self.v2 += [i]
 +
 +
x = Fa()
 +
print x.v2
 +
[]
 +
x.add_v2(3)
 +
print x.v2
 +
[3]
 +
x.add_v2(6)
 +
print x.v2
 +
[3, 6]
 +
 +
class AlmaFa(Fa):
 +
    k = 'ato'
 +
    def teki(self, i):
 +
        self.v1 = i
 +
 +
y = AlmaFa()
 +
print x.v1
 +
10
 +
print y.v1
 +
10
 +
y.teki(4)
 +
print y.v1
 +
4
 +
print x.v1
 +
10
 +
Fa.v1 = 9
 +
print x.v1
 +
9
 +
print y.v1
 +
4
 +
print AlmaFa.v1
 +
9
 +
print x.k
 +
AttributeError: Fa instance has no attribute 'k'
 +
print y.v2
 +
[]
 
</python>
 
</python>
  

A lap 2012. április 19., 22:02-kori változata

Tartalomjegyzék

Class

készíts üres osztályt

  • változtasd az osztály szintű változókat
>>> 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
  • példa dinamikus modosításra
>>> class A:
...   pass
... 
>>> def pow(obj):
...   return obj.base ** obj.exp
... 
>>> 
>>> x = A()
>>> x.base, x.exp = 5,2
>>> print pow(x)
25

örökítsd az osztályt egy másikban

  • nézd meg miket érsz él benne, miket tudsz felülírni, mi lesz az eredménye
class Fa:
    v1 = 10
    v2 = []
 
    def add_v2(self, i):
        self.v2 += [i]
 
x = Fa()
print x.v2
[]
x.add_v2(3)
print x.v2
[3]
x.add_v2(6)
print x.v2
[3, 6]
 
class AlmaFa(Fa):
    k = 'ato'
    def teki(self, i):
        self.v1 = i
 
y = AlmaFa()
print x.v1
10
print y.v1
10
y.teki(4)
print y.v1
4
print x.v1
10
Fa.v1 = 9
print x.v1
9
print y.v1
4
print AlmaFa.v1
9
print x.k
AttributeError: Fa instance has no attribute 'k'
print y.v2
[]

készíts osztályokat

  • Jegyzettömb
  • Jegyzet
  • Írd felül a konstruktorukat
  • csináld meg, hogy a __len__ operátor a jegyzettömbben lévő jegyzetek számát adja vissza
  • csináld meg, hogy a __getitem__ operátor a jegyzettömbben az adott indexű jegyzetet adja vissza
  • csináld meg, hogy a __add__ operátor jegyzet esetén hozzáadja a jegyzetet, jegyzettömb esetén meg az abban lévő elemeket
  • csináld meg, hogy a jegyzettömb create_gen() függvénye egy a jegyzeteken végigfutó generátort adjon vissza
  • csináld meg, hogy a jegyzettömb __iter__ függvénye egy a jegyzeteken végigfutó iterátort adjon vissza
  • stb. ha találsz értelmes operátort még azt is módosíthatod, pl. __str__, __repr__, __call__

egészítsd ki a labirintus beolvasót a with kulcsszó használatával

Személyes eszközök