2.20. Clasa de bază¶
O clasă grupează datele și funcțiile care acționează asupra acelor date sub un singur nume. Recurgerea la una merită atunci când mai multe elemente de stare aparțin împreună, iar majoritatea funcțiilor dintr-un script primesc același set de valori drept argumente.
2.20.1. Cuvântul-cheie class¶
Cuvântul-cheie este class. Corpul conține o metodă __init__ care rulează de fiecare dată când este creată o nouă instanță:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
p = Point(3, 4)
print(p.x, p.y)
Ieșire:
3 4
Point este clasa; p este o instanță a ei. Parantezele de la apelul Point(3, 4) invocă __init__, care atribuie argumentele unor atribute pe noua instanță. self este numele convențional pentru instanță; self.x setează un atribut pe care restul metodelor instanței îl vor citi.
2.20.2. Când să folosești o clasă¶
Recurge la o clasă atunci când acestea sunt adevărate în același timp:
Un set restrâns de valori înrudite circulă împreună peste tot (coordonatele
xșiyale unui punct; valoarea, unitatea și marcajul temporal ale unei citiri de senzor).Mai multe funcții primesc același set de valori și operează asupra lor.
Este util să menții mai multe astfel de pachete active în același timp, distincte între ele.
Dacă datele sunt punctuale, un simplu dict sau tuple este de obicei suficient. Dacă ai nevoie doar de un singur pachet de constante, variabilele la nivel de modul sunt în regulă. Clasele nu sunt containerul implicit – își câștigă locul atunci când starea și comportamentul vor să rămână împreună.
2.20.3. Ce face __init__¶
__init__ este doar o metodă obișnuită. Orice este atribuit lui self în interiorul ei devine un atribut pe noua instanță:
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)
Ieșire:
temperature C []
readings este inițializat la o listă goală – fiecare nouă instanță primește propria listă, nu una partajată. Orice nu este atribuit lui self este local lui __init__ și dispare când aceasta se încheie.