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`