Informatika2-2012/Gyakorlat10

A MathWikiből
(Változatok közti eltérés)
(használd összegyűjtött paraméter átadásra egy tetszőleges függvényen)
(Class)
 
(egy szerkesztő 4 közbeeső változata nincs mutatva)
1. sor: 1. sor:
 +
[http://wiki.math.bme.hu/view/Informatika2-2012 <-- vissza]
 +
 
== Class ==
 
== Class ==
 +
 +
[http://wiki.math.bme.hu/view/Informatika2-2012/Gyakorlat10m megoldás]
  
 
=== készíts üres osztályt ===
 
=== készíts üres osztályt ===
43. sor: 47. sor:
 
</python>
 
</python>
  
=== ö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 ===
 +
* nézd meg miket érsz él benne, miket tudsz felülírni, mi lesz az eredménye
 +
<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>
 +
 
 
=== készíts osztályokat ===
 
=== készíts osztályokat ===
* Jegyzettömb
+
* Jegyzettomb - névvel ami a jegyzeteket tárolja
* Jegyzet
+
* Jegyzet - a jegyzetek amik szöveget tárolják
  
 
* Írd felül a konstruktorukat
 
* Írd felül a konstruktorukat
* csináld meg, hogy a __len__ operátor a jegyzettömbben lévő jegyzetek számát adja vissza
+
** a jegyzetet a tarolni kívánt szöveggel paraméterezzük
* csináld meg, hogy a __getitem__ operátor a jegyzettömbben az adott indexű jegyzetet adja vissza
+
** a jegyzettömböt az első jegyzet szövegével paraméterezzük
* 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 __len__ operátora a jegyzettömbben lévő jegyzetek számát adja vissza
 +
* csináld meg, hogy a jegyzettömb __getitem__ operátora a jegyzettömbben az adott indexű jegyzetet adja vissza
 +
* csináld meg, hogy a jegyzettömb __add__ operátora 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 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
+
* csináld meg, hogy a jegyzettömb __iter__ operátora 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__
 
* 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 ===
 
=== egészítsd ki a labirintus beolvasót a with kulcsszó használatával ===
 +
 +
 +
[http://wiki.math.bme.hu/view/Informatika2-2012 <-- vissza]

A lap jelenlegi, 2012. május 1., 13:27-kori változata

<-- vissza

Tartalomjegyzék

Class

megoldás

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

  • Jegyzettomb - névvel ami a jegyzeteket tárolja
  • Jegyzet - a jegyzetek amik szöveget tárolják
  • Írd felül a konstruktorukat
    • a jegyzetet a tarolni kívánt szöveggel paraméterezzük
    • a jegyzettömböt az első jegyzet szövegével paraméterezzük
  • csináld meg, hogy a jegyzettömb __len__ operátora a jegyzettömbben lévő jegyzetek számát adja vissza
  • csináld meg, hogy a jegyzettömb __getitem__ operátora a jegyzettömbben az adott indexű jegyzetet adja vissza
  • csináld meg, hogy a jegyzettömb __add__ operátora 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__ operátora 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

<-- vissza

Személyes eszközök