2.20. Prvorazredno¶
Klasa grupira podatke i funkcije koje djeluju na te podatke pod jednim imenom. Posegnuti za njom isplati se kad nekoliko dijelova stanja pripada zajedno i kad većina funkcija u skripti uzima taj isti skup vrijednosti kao argumente.
2.20.1. Ključna riječ class¶
Ključna riječ je class. Tijelo sadrži metodu __init__ koja se izvršava svaki put kad se stvori nova instanca:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
p = Point(3, 4)
print(p.x, p.y)
Izlaz:
3 4
Point je klasa; p je njezina instanca. Zagrade u pozivu Point(3, 4) pozivaju __init__, koja pridružuje argumente atributima nove instance. self je konvencionalno ime za instancu; self.x postavlja atribut koji će čitati ostale metode instance.
2.20.2. Kada koristiti klasu¶
Posegni za klasom kad je sljedeće istovremeno istinito:
Šačica povezanih vrijednosti svuda putuje zajedno (točkin
xiy; vrijednost, jedinica i vremenska oznaka senzorskog očitanja).Nekoliko funkcija uzima taj isti skup vrijednosti i djeluje na njega.
Korisno je istovremeno održavati više od jednog takvog snopa, međusobno različitih.
Ako su podaci jednokratni, obični dict ili tuple obično su dovoljni. Ako trebaš samo jedan snop konstanti, varijable na razini modula su u redu. Klase nisu zadani spremnik – zarade svoje mjesto kad stanje i ponašanje žele ostati zajedno.
2.20.3. Što __init__ radi¶
__init__ je samo obična metoda. Sve što se unutar nje pridruži objektu self postaje atribut nove instance:
class Sensor:
def __init__(self, name, unit):
self.name = name
self.unit = unit
self.readings = []
temp = Sensor("temperature", "C")
print(temp.name, temp.unit, temp.readings)
Izlaz:
temperature C []
readings se inicijalizira na praznu listu – svaka nova instanca dobiva vlastitu listu, ne dijeljenu. Sve što nije pridruženo objektu self lokalno je za __init__ i nestaje kad se ona vrati.