Concetti Chiave
- Un oggetto rappresenta un valore incapsulato in un'identità, mentre una classe è una collezione di oggetti che condividono struttura e metodi.
- Le istanze sono oggetti di una classe che ereditano la struttura e i metodi definiti dalla classe stessa.
- I metodi in una classe richiedono almeno un parametro, convenzionalmente chiamato "self", che rappresenta l'istanza dell'oggetto.
- I metodi dunder (double underscore) hanno scopi specifici e includono funzioni come __init__, __str__, e operatori di confronto.
- I metodi speciali possono ridefinire operazioni numeriche e di accesso a sequenze, permettendo un'interazione personalizzata con gli oggetti.
Concetti di base delle classi
Oggetto: valore incapsulato in una identità
Classi (tipo): collezione di oggetti che condividono struttura e metodi
Istanze = oggetti di una classe che condividono struttura e metodi definiti dalla classe
Class nome (nomiopzionali):
comandi
definizioni di metodi
Un metodo ha sempre almeno un parametro:
- il primo parametro di un metodo self per convenzione
- quando il metodo è invocato, quel parametro è legato all'oggetto che lo riceve
Metodi dunder
Il "double underscore" si pronuncia dunder
I metodi con dunder doppio (prefisso e postfisso)
__nome__
Per convenzione sono usati per scopi specifici e vanno usati solo per quello
__init__ (self, arg_opzionali) per inizializzare
__str__ (self, arg_opzionali) con print() restituisce una stringa
Confronto:
__eq__ (self, other) con ==, is
__ne__(self, other) con !=
__lt__(self, other) con
__gt__(self, other) con >
__le__(self, other) con
__ge__(self, other) con >=
Le operazioni booleane (and,or,not) non possono essere ridefinite via metodi speciali __xxx__
Numerici:
__pos__(self) con + unario
__neg__(self) con - unario
__abs__(self) con abs()
__round__(self, n) con round()
__floor__(self) con math.floor()
__ceil__(self) con math.ceil()
__trunc__(self) con math.trunc()
__add__(self, other) con +
__sub__(self, other) con -
__mul__(self, other) con *
__floordiv__(self, other) con //
__truediv__(self, other) con /
__pow__(self, other) con **
__iadd__(self, other) con la parte destra di +=
__isub__(self, other) con la parte destra di -= Accesso a sequenze:
__len__(self) con len()
__getitem__(self, key) con self[key]
__setitem__(self, key, value) con self[key]=value
Domande da interrogazione
- Qual è la definizione di una classe in programmazione orientata agli oggetti?
- Cosa sono i metodi dunder e a cosa servono?
- Quali operazioni numeriche possono essere ridefinite tramite metodi speciali in una classe?
Una classe è una collezione di oggetti che condividono struttura e metodi, fungendo da modello per creare istanze, ovvero oggetti che seguono le definizioni stabilite dalla classe.
I metodi dunder, o "double underscore", sono metodi speciali in Python che hanno un prefisso e un suffisso di doppio underscore. Sono utilizzati per scopi specifici, come l'inizializzazione (__init__) o la rappresentazione in stringa (__str__).
Le operazioni numeriche che possono essere ridefinite includono addizione (__add__), sottrazione (__sub__), moltiplicazione (__mul__), e divisione (__truediv__), tra le altre, permettendo di personalizzare il comportamento degli oggetti durante queste operazioni.