Table of Contents
Oggetti e attributi
indice: linguaggio_python
Cosa faremo?
Riprendiamo l'esempio della costruzione di una finestra usando la classe Tkinter.Tk per parlare del contenuto degli oggetti.
Prerequisiti
Concetto di oggetto istanza, classe e metodo
I metodi di solito consentono al programmatore di eseguire delle azioni sugli oggetti. Vediamo in questo esempio il metodo title()
- 40.py
import Tkinter root = Tkinter.Tk() root.title(“il mio programma”) root.mainloop()
Questo metodo imposta il titolo della finestra, memorizzandolo in una variabile/oggetto interna all'oggetto “root”. In effetti tutti gli oggetti al loro interno sono costituiti da altri oggetti o da semplici variabili e questi elementi sono chiamati attributi dell'oggetto. Il programmatore non ha quasi mai la possibilità di modificare direttamente queste variabili, per esempio tramite un'assegnazione, ma deve usare i metodi predisposti per fare questo tipo di operazioni.
Secondo la programmazione orientata agli oggetti, gli attributi “dato” delle classi e delle istanze devono essere difficili da modificare direttamente dal programmatore, ma solo tramite degli appositi attributi “metodi”.
I metodi possono essere divisi in due categorie:
- metodi ispettori
- metodi manipolatori
- I primi sono usati per vedere il dato senza modificarlo.
- I secondi sono usati per modificare il dato (senza vederlo).
Questo modo di scrivere il programma può sembrare difficile e innaturale, ma permette di avere dei vantaggi nella manutenzione del programma.
Attributi pubblici e privati
Per rendere difficile modificare un attributo “dato”, di solito lo si rende “privato”. In altre parole si deve limitare la sua possibilità di accesso da parte del programma. Viceversa i dati che non sono privati, sono detti pubblici, cioè chiunque vi può accedere da qualsiasi punto del programma.
In Python per rendere pubblico o privato qualcosa, basta usare una convenzione sul nome:
- __esempio1
- è la convenzione da usare per un elemento privato
- esempio2
- è la convenzione da usare per un elemento pubblico
- __esempio3__
- è la convenzione da usare per un elemento built-in (pubblico), una convenzione che il programmatore non dovrebbe mai adottare
Nel caso in cui si tenti di invocare un metodo privato, si ottiene un errore poco chiaro:
AttributeError: 'Classe' instance has no attribute '__esempio1'