Python versione Bignami - Classi
Definizione
# Definisce una classe contatore
class Contatore:
"Implementa una sequenza monotona crescente di numeri"
# Costrutture
def __init__(self, inizio = 0):
"Crea un contatore che parte da 'inizio'"
# Inizializza lo stato della classe
self.valore = inizio
# Metodo, definito come una funzione
def successivo(self, passo = 1):
"Genera un numero"
# Si accede allo stato della classe tramite self
res = self.valore
self.valore += passo
return res
# Crea un oggetto di tipo "Pipa"
p = Contatore(5)
print p.successivo(2)
Ereditarietà
# Nuova classe che eredita da Contatore
class ContatoreResettabile(Contatore):
"""
Implementa una sequenza monotona crescente di numeri
che può essere fatta ripartire dall'inizio
"""
def __init__(self, inizio = 0):
# Chiama il costruttore della classe padre
Contatore.__init__(self, inizio)
self.inizio = inizio
def reset(self):
"Riparti dall'inizio"
self.valore = self.inizio
Estendere metodi
class ContatoreDiDebug(Contatore):
"Contatore che stampa i numeri che vengono generati"
def successivo(self, passo = 1):
# Chiama lo stesso metodo della classe padre
res = Contatore.successivo(self, passo)
print "Debug:", res
return res
Operazioni con le classi
isinstance(p, Contatore)
restituisceTrue
se p è un oggetto di tipo o Contatore o una delle sue sottoclassiissubclass(ContatoreDiDebug, Contatore)
restituisceTrue
se ContatoreDiDebug è una sottoclasse di Contatorep.__class__
restituisce la classe di p.
Esempio:
c = Contatore()
d = ContatoreDiDebug()
isinstance(c, Contatore) -> True
isinstance(d, Contatore) -> True
isinstance(c, ContatoreDiDebug) -> False
isinstance(d, ContatoreDiDebug) -> True
issubclass(ContatoreDiDebug, Contatore) -> True
c.__class__ == Contatore -> True
d.__class__ == Contatore -> False
d.__class__ == ContatoreDiDebug -> True
Alcuni metodi speciali
__del__(self)
distruttore (normalmente non è usato)__repr__(self)
restituisce una stringa che descrive l'oggetto__str__(self)
restituisce un valore stringa per l'oggetto; viene usato daprint
estr()
__cmp__(self, other)
confronto tra oggetti, usato dasort()
; restituisce un numero negativo seself < other
, 0 seself == other
e positivo se `selfother`