Kategória: Python gyerekeknek.
Elmélet
A szorosan összetartozó függvényeket és változókat külön helyre, ún. osztályokba tudjuk szervezni. Például:
class Person: def __init__(self, name, age): self.name = name self.age = age def print_info(self): print(self.name + ' ' + str(self.age) + ' éves.') person1 = Person('Pista', 17) person2 = Person('Jóska', 46) person3 = Person('Marika', 23) print(person1.name) print(person1.age) person1.print_info() person2.print_info() person3.print_info()
Ennek eredménye:
Pista 17 Pista 17 éves. Jóska 46 éves. Marika 23 éves.
Vizsgáljuk meg a fenti kódot!
- A class kulcsszóval indul.
- Utána jön az osztály neve. Ezt általában nagy kezdőbetűvel írjuk. Ebben a példában ez a Person, ami személyt jelent angolul.
- Az első sor itt is kettősponttal zárul, és a belseje ugyanúgy beljebb van húzva, mint az elágazásoknál és a ciklusoknál.
- A def init részt létrehozónak, idegen szóval konstruktornak hívjuk. Az init az angol initialize szó rövidítése, ami kezdeti beállítást jelent. Ennek mindenképpen ez kell, hogy legyen a neve.
- Az első paraméter "foglalt"; általában self.
- A példában van még két paraméter: name (név) és age (életkor).
- A self.name = name és a self.age = age elmentik a paraméterül kapott értékeket, hogy később is fel tudjuk használni. A self után megadott értékeket adatmezőknek hívjuk.
- A def print_info(self): a Person osztály másik függvénye. Itt is kötelezően meg kellett adni azt, hogy self, egyébként ennek a példában nincs paramétere.
- A print(self.name + ' ' + str(self.age) + ' éves.') kiírja az illető nevét, és azt, hogy hány éves. Figyeljük meg azt, hogy a self-en keresztül érjük el azt, amit az init függvényben beállítottunk!
- person1 = Person('Pista', 17), person2 = Person('Jóska', 46) és person3 = Person('Marika', 23): ezeket példányosításnak hívjuk: konkrét értékeket adnunk nekik.
- person1.name és person1.age: így tudjuk az egyes adatmezőket elérni kívülről, közvetlenül.
- A person1.print_info() (és a másik kettő) azt mutatja meg, hogy hogyan tudunk függvényt hívni egy osztályon. Figyeljük meg, hogy mindegyik függvény a saját információit írja ki.
Általában az adatmezőket kívülről nem szoktuk közvetlenül használni, hanem csak függvényeken keresztül.
Osztályok a Scratch-ben külön nincsenek, ám egész jól lehet a lehetőséget szimulálni a másolatot készítő utasításokkal, valamint olyan változókkal, amelyek a kiválasztott szereplőhöz tartoznak.

Feladat
Készítsük el a kvíz osztályokkal megvalósított változatát! Egy osztály tartalmazza a következőket:
- A kérdés.
- A helyes válasz.
- Egy függvény, ami kiírja a kérdést, bekéri a választ, és megfelelően kezeli azt.
Példányosítsunk 5 kérdést, tegyük bele egy listába, és azokon lépegessünk végig.
class Question: def __init__(self, question, correct_answer): self.question = question self.correct_answer = correct_answer def check_answer(self): answer = input(self.question) if answer == self.correct_answer: print('Helyes!') return True else: print(f'A válasz helytelen; a helyes válasz {self.correct_answer} lett volna.') return False questions = [] questions.append(Question('Mi Magyarország fővárosa? ', 'Budapest')) questions.append(Question('Hány fokon forr a víz? ', '100')) questions.append(Question('Melyik az az állat, amelyiknek nagy füle és hosszú ormánya van? ', 'elefánt')) questions.append(Question('Hogy mondjuk angolul azt, hogy alma? ', 'apple')) questions.append(Question('Mi volt Petőfi vezetéknevű költőnk keresztneve? ', 'Sándor')) points = 0 for question in questions: result = question.check_answer() if result: points = points + 1 print() percentage = str(100 * points / len(questions)) + '%' print('Az eredmény: ' + percentage)
Önálló feladat
Egészítsük ki a Question osztályt egy típus adatmezővel. A típus lehet kiegészítés (mint fent), szám, több válaszlehetőségből egy stb. A check_answer függvényt ennek alapján módosítsuk.
Teszt
TODO