User Tools

Site Tools


appunti3s:ereditarieta_in_python

indice linguaggio_python

Ereditarietà in Python

Si è visto come creare una classe, con attributi dato e attributi metodi

creare_classi_e_funzioni_in_python

La programmazione orientata agli oggetti sarebbe inutile senza ereditarietà.

L'ereditarietà è un modo di scrivere il codice sorgente che permette di riutilizzare il codice già scritto e di mantenerlo separato in moduli facili da leggere, correggere e mantenere. Consiste nell'organizzare il codice in modo logico, separando le parti che si occupano di compiti diversi. Il codice è diviso in “classi”

Per riutilizzare il codice di una classe all'interno di un'altra classe, si fa un'operazione di genealogia: la classe padre passa al figlio il proprio codice (in eredità).

In Python si usa questa sintassi

  class Figlio(Padre):

    def __init__(self):
        Padre.__init__(self) # è corretto solo se Padre possiede metodo __init__
        pass

**__init__** non è un metodo obbligatorio, ma quando è presente bisogna rispettare delle regole:

  1. è necessario usare “self” come argomento
  2. nel caso di ereditarietà, l'eventuale chiamata del costruttore del padre deve essere esplicita
  3. non deve restituire nulla

Overriding (si)

In Python

  • il padre può avere un metodo, ad es. “mangiare”
  • e il figlio lo può ereditare oppure sovrascrivere

Quando si chiama un metodo di una classe Padre, si potrebbe evocare un metodo di una classe Figlio (se ha piu' figli cosa accade?). In Python tutti i metodi sono virtuali….

Esistono metodi comuni a tutte le classi Python, che possono essere sovrascritti. Questo conferisce alle classi in cui si sovrascrivono la possibilità di fare operazioni “insolite”.

  • __setitem__
    • permette di usare la sintassi oggetto[chiave]=valore;
  • __getitem__
    • permette di usare la sintassi oggetto[chiave];
  • __repr__
    • permette di usare la sintassi print(oggetto);
  • __cmp__
    • permette di usare la sintassi oggetto1==oggetto2;
  • __len__
    • permette di usare la sintassi len(oggetto);
  • __delitem__
    • permette di usare la sintassi del oggetto[chiave];

Overloading (no)

Python non supporta overloading dei metodi, non differenza in base agli argomenti, ma i metodi si distinguono solo in base al loro nome.

appunti3s/ereditarieta_in_python.txt · Last modified: 2020/08/01 00:10 by profpro