User Tools

Site Tools


appunti3s:python_oggetti_e_attributi

This is an old revision of the document!


Oggetti e attributi

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.

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'
appunti3s/python_oggetti_e_attributi.1596273058.txt.gz · Last modified: 2020/08/01 11:10 by profpro