Enrico's pages/ 2007/ pygnami/ Python versione Bignami - Classi

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