Množina dát (atribútov) a množina funkcií (metód).
V Pythone je všetko objekt.
pozdrav = "Dobré ráno"
# máme metódy pre prácu s reťazcami
class Dog:
def __init__(self, name):
self.name = name
dog1 = Dog("Buddy")
trieda = údajový typ = spôsob uloženia v pamäti
class Dog:
def __init__(self, name):
# self.name je atribút
self.name = name
# self.bark() je metóda
def bark(self):
return "Haf!"
Každý objekt je inštancia triedy.
inštancia = trieda s konkrétnymi hodnotami atributov.
class Counter:
step = 0 # triedna premenná
def __init__(self):
self.count = 0
def increment(self):
self.count += Counter.step
Opisujú správanie objektu
menia hodnoty atribútov a spôsobujú vedľajšie efekty
Konštruktor je špeciálna metóda, ktorá sa volá na začiaktku a nastavuje počiatočné hodnoty atribútov.
Alokuje zdroje.
Deštruktor sa stará o uvoľnenie zrojov.
__init__ → inicializácia objektu__del__ → čistenie (zriedka používané)class Person:
def __init__(self, name):
self.name = name
# deštruktor väčšinou v Pythone nie je potrebný
def __del__(self):
print("Objekt zmazaný")
__class Vector:
def __init__(self, x):
self.x = x
def __add__(self, other):
return Vector(self.x + other.x)
Funkcia sa môže skončiť neočakávaným spôsobom:
Výnimka je spôsob hlásenia chyby pri vykonávaní funkcie ktorý obchádza návratovú hodnotu.
Fukcia s výnimkami má potom dva rôzne spôsoby ukončenia:
try:
x = int("abc")
except ValueError:
print("Konverzia zlyhala")
try – skúsexcept – chytajtry / excepttry:
vysledok = 10 / 0
except ZeroDivisionError:
print("Chyba: delenie nulou!")
Výstup:
Chyba: delenie nulou!
Bez except by program zlyhal.
try:
x = int(input("Zadaj číslo: "))
print(10 / x)
except ValueError:
print("Chyba: zadali ste niečo iné ako číslo.")
except ZeroDivisionError:
print("Chyba: nedelíš nulou!")
try:
x = int(input("Zadaj číslo: "))
print(10 / x)
except (ValueError, ZeroDivisionError):
print("Chyba: nesprávny vstup.")
try:
x = int(input("Zadaj číslo: "))
print(10 / x)
except ValueError as e:
print(f"Chyba: {e}")
except ZeroDivisionError as e:
print(f"Chyba: {e}")
excepttry:
x = int(input("Zadaj číslo: "))
print(10 / x)
except Exception as e:
print(f"Nečakána chyba: {e}")
👉 Využíva sa ako záložná možnosť.
👉 Neodporúča sa chytall Exception bez potreby — môže zakryť iné chyby.
finallytry:
f = open("data.txt")
data = f.read()
except FileNotFoundError:
print("Súbor nebol nájdený.")
finally:
print("Ukončenie operácie.")
Blok finally sa vykoná vždy — či už nastala chyba, alebo nie.
Používa sa na upratovanie (zatvorenie súboru, spojenia, ...).
try:
# kód, ktorý môže zlyhať
vysledok = 10 / x
except ZeroDivisionError:
# ak nastane konkrétna chyba
print("Delenie nulou!")
else:
# ak nič nezlyhalo
print(f"Výsledok: {vysledok}")
finally:
# toto sa vykoná vždy
print("Hotovo.")
Poradie: try → except → else → finally
raise – vyvolanie výnimkyvek = int(input("Zadaj vek: "))
if vek < 0:
raise ValueError("Vek nemôže byť záporný.")
print(f"Máš {vek} rokov.")
Výstup pri zápornom veku:
Traceback (most recent call last):
...
ValueError: Vek nemôže byť záporný.
raise?def nastav_vek(vek):
if vek < 0:
raise ValueError("Vek musí byť nezáporné číslo.")
class NedostatokPenezError(Exception):
pass
def plat(suma):
if suma > 100:
raise NedostatokPenezError("Nedostatok prostriedkov.")
Použitie:
try:
plat(150)
except NedostatokPenezError as e:
print(e)
class AppError(Exception):
pass
class NedostatokPenezError(AppError):
pass
class ChybaAutentifikacie(AppError):
pass
Chytíme všetky chyby aplikácie:
try:
...
except AppError as e:
print(f"Aplikačná chyba: {e}")
Deep Dive into Python, časť o výnimkách
Vo výnimke je uložená informácia o vzniknutom stave - chybové hlásenie
Podľa vzniknutej situácie vieme:
def divide(a, b):
if b == 0:
raise ValueError("Delenie nulou nie je povolené")
return a / b
Výnimky sú organmizované do tried.
Chytíme určitú triedu výnimiek.
Vieme zachytiť aj konkrétny objekt s výnmimkou.
Pri ošetrení výnimky sa zameriame na uričý druh výnimky.
Implementujú:
__iter__()__next__()class Counter:
def __init__(self, max):
self.max = max
self.current = 0
def __iter__(self):
return self
def __next__(self):
if self.current < self.max:
self.current += 1
return self.current
else:
raise StopIteration
counter = Counter(5)
for num in counter:
print(num)
def counter(n):
for i in range(n):
yield i
counter = counter(5)
for num in counter:
print(num)
Deep Dive into Python, druhá polovica