Home Programmazione Python, corso base Capitolo 13: Classi, oggetti, campi e metodi. Metodi privati. Overloading degli operatori.

Page Rank Check    





Ultimi articoli

Capitolo 13: Classi, oggetti, campi e metodi. Metodi privati. Overloading degli operatori.
Guide di programmazione - Python, corso base
Scritto da RedBaron85   
Sabato 30 Gennaio 2010 17:39

Guida a Python - Corso base - Capitolo 13: classi, oggetti, campi e metodi. Metodi privati e overloading degli operatori.


Capitolo 13: Classi, oggetti, campi e metodi. Metodi privati. Overloading degli operatori.

Le classi di oggetti, in Python, vengono definite utilizzando la parola chiave class, seguita dal nome della classe e dal simbolo : (due punti); dalla riga successiva, nel "blocco" identificato, mediante l'indentazione, come appartenente alla classe, andranno poi definiti campi e metodi.

 

Esempio:

class figureRegolari:

# corpo della classe

[pass]

 

Si crea una istanza di una classe mediante la scrittura:

variabileIstanza = nomeClasse([eventuali parametri al costruttore])

ad esempio:

>>> quadrato1 = figureRegolari()

 

 

All'interno della classe, ci si riferirà all'oggetto istanziato ("se stesso"; ad esempio, "this" in Java) mediante la parola chiave self, che poi dovrà anche essere il primo parametro di tutti i metodi della classe (costruttore incluso).

 

Il metodo principale di una classe è il costruttore, che ha sempre firma "interna":

__init__(self, [eventuali parametri])

(due tratti di underscore _ prima e dopo la parola init).

 

Il parametro self va messo, come detto, sempre come primo parametro dei metodi di una classe (costruttore incluso) nella loro definizione, ma non va passato come parametro quando tali metodi vengono invocati.

self va utilizzato anche per definire gli attributi (campi) della classe.

 

Esempio:

>>> class quadrato:
lato = 0
def __init__(self, l):
self.lato = l
def getPerimetro(self):
return (4*self.lato)
def getArea(self):
return (self.lato * self.lato)
>>>

>>> quadrato1 = quadrato(4)
>>> print quadrato1.lato
4

>>> areaQuadrato1 = quadrato1.getArea()
>>> print areaQuadrato1
16
>>>

>>> print quadrato1.getPerimetro()
16
>>>

 

 

E' possibile definire, all'interno delle classi, dei metodi privati, che potranno essere invocati solo da altri metodi della stessa classe, non "dall'esterno".

Per creare un metodo privato, è sufficiente far precedere il suo nome da 2 tratti di underscore (NON bisogna porre però due tratti di underscore alla fine del nome, vedremo in seguito perchè); ad esempio:

def __metodo1(self, [altri parametri opzionali])

 

Python, come molti altri linguaggi di programmazione, consente l'overloading degli operatori, ossia di riadattare alle nostre classi alcuni elementi della sintassi di Python, come ad esempio gli operatori relazionali; es.: 3 < 5 ha un senso nella sintassi di base di Python perchè i due valori sono degli interi, ma possiamo definire, nelle nostre classi, il significato di < , in modo da utilizzarlo per confrontare, secondo un criterio, due oggetti (per esempio, persona1 < persona2 potrebbe indicare un confronto in base all'età, per cui se persona1 dovesse avere un campo numerico età con valore inferiore a quello di persona2, il controllo "persona1 < persona2" sarà True).

I metodi "speciali", quelli per i quali è consentito l'overloading, vengono indicati con due tratti di underscore prima e dopo la sigla; sono metodi speciali "di base", ad esempio, i seguenti:

__len__ "Length", lunghezza di qualcosa (una stringa) o numero di elementi in una sequenza (liste, ...).
__str__ "To string", una versione in stringa (informativa) dell'oggetto (vd. esempio in seguito)
__gt__ "Greater than", cioè maggiore di (>)
__lt__ "Less than", cioè minore di (<)
__eq__ "Equal", cioè uguale a (==)
__le__ "Less equal", cioè minore uguale a (<=)
__ge__ "Greater equal", cioè maggiore uguale a (>=)

Nel caso di operatori, come quelli relazionali, ci si riferirà all'istanza "di sinistra" con self e all'istanza "di destra" con other; a breve un esempio completo.

Esistono, ovviamente, molti altri metodi speciali, ma per una trattazione più approfondita si rimanda alla documentazione ufficiale di Python.

Esempio pratico:

>>> class persona:
nome = ""
cognome = ""
eta = 0
def __init__(self, n, c, e):
self.nome = n
self.cognome = c
self.eta = e

def __str__(self):
print "Persona con cognome: " + self.cognome + ", nome: " + self.nome + ", età: " + str(self.eta)

def __lt__(self, other):
return (self.eta < other.eta)



>>> miaPersona1 = persona("Mario", "Rossi", 50)
>>> miaPersona1.__str__()
Persona con cognome: Rossi, nome: Mario, età: 50
>>> miaPersona2 = persona("Giorgio", "Bianchi", 40)
>>> miaPersona1 < miaPersona2
False
>>>

Tags:     programmazione      guide      manuali      corso      python      capitolo 13      classi      oggeti      campi      metoi      metodi privati      overloading      operatori
Ultimo aggiornamento Domenica 22 Gennaio 2012 14:01
 

Ti è piaciuto questo articolo ? Condividilo !



RedBaron85.com Forum community banner

Non hai trovato quello che cercavi ?
Ricerca personalizzata
Copyright © 2012 RedBaron85.com: Informatica, CG 2D e 3D, Blender, Python, Java 2D e 3D, 3D Studio e altro ancora!. Tutti i diritti riservati.
Joomla! è un software libero rilasciato sotto licenza GNU/GPL.

Milanese Francesco - Partita IVA: 04950350878

AltroArticoliblog utentiBlueprintsContestenglishProgrammazioneModelliElencoNewsTexturesTutorialsVideotutorials