2.20. Osztályok az alapoktól¶
Az osztály az adatokat és az azokon dolgozó függvényeket egyetlen név alatt csoportosítja. Megéri elővenni, amikor több, összetartozó állapotelem van együtt, és egy szkript függvényeinek többsége ugyanezt az értékhalmazt veszi át argumentumként.
2.20.1. A class kulcsszó¶
A kulcsszó a class. A törzs egy __init__ metódust tartalmaz, amely minden új példány létrehozásakor lefut:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
p = Point(3, 4)
print(p.x, p.y)
Kimenet:
3 4
A Point az osztály; a p annak egy példánya. A Point(3, 4) híváson lévő zárójelek meghívják az __init__ metódust, amely az argumentumokat az új példány attribútumaihoz rendeli. A self a példány szokásos neve; a self.x egy olyan attribútumot állít be, amelyet a példány többi metódusa olvasni fog.
2.20.2. Mikor használj osztályt¶
Akkor nyúlj osztályhoz, amikor a következők egyszerre igazak:
Egy maréknyi összefüggő érték mindenhová együtt utazik (egy pont
xésykoordinátája; egy érzékelőleolvasás értéke, mértékegysége és időbélyege).Több függvény veszi át ugyanezt az értékhalmazt, és dolgozik rajtuk.
Hasznos egyszerre több ilyen csomagot életben tartani, egymástól megkülönböztetve.
Ha az adat egyszeri, általában elég egy egyszerű dict vagy tuple. Ha csak egyetlen állandóhalmazra van szükséged, a modulszintű változók megfelelnek. Az osztályok nem az alapértelmezett tároló – akkor érdemelik ki a helyüket, amikor az állapot és a viselkedés össze akar tapadni.
2.20.3. Mit csinál az __init__¶
Az __init__ csak egy szokásos metódus. Bármi, amit benne a self objektumhoz rendelsz, az új példány attribútumává válik:
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)
Kimenet:
temperature C []
A readings egy üres listára inicializálódik – minden új példány a sajátját kapja, nem egy megosztottat. Bármi, amit nem a self objektumhoz rendelsz, az __init__ lokális változója, és eltűnik, amikor az visszatér.