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

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

Link