appunti3s:creare_classi_e_funzioni_in_python
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
appunti3s:creare_classi_e_funzioni_in_python [2020/06/08 22:19] – external edit 127.0.0.1 | appunti3s:creare_classi_e_funzioni_in_python [2020/07/29 18:42] (current) – [Parametri opzionali] profpro | ||
---|---|---|---|
Line 45: | Line 45: | ||
* __attributi__ (dati e metodi) = tutto quello che viene dopo un punto (anche una funzione math.…). | * __attributi__ (dati e metodi) = tutto quello che viene dopo un punto (anche una funzione math.…). | ||
* __attributo dato__ = sono le variabili di un particolare oggetto istanza. Vivono nel namespace dell' | * __attributo dato__ = sono le variabili di un particolare oggetto istanza. Vivono nel namespace dell' | ||
- | * __attributo metodo__ = sono le funzioni di un particolare oggetto istanza. Vivono nel namespace dell' | + | * __attributo metodo__ = sono le funzioni di un particolare oggetto istanza. Vivono nel namespace dell' |
* in Python è possibile rinominare i metodi (detti attributi metodi) perciò nella classe bisogna evitare conflitti di nome tra dati e funzioni. Si possono usare sostantivi per i primi e verbi per i secondi... | * in Python è possibile rinominare i metodi (detti attributi metodi) perciò nella classe bisogna evitare conflitti di nome tra dati e funzioni. Si possono usare sostantivi per i primi e verbi per i secondi... | ||
Nota: //self// non è una keyword del linguaggio Python, ma il suo uso è una vecchia consuetudine e cambiarla sarebbe poco utile... | Nota: //self// non è una keyword del linguaggio Python, ma il suo uso è una vecchia consuetudine e cambiarla sarebbe poco utile... | ||
+ | Nota2: In Python, un attributo metodo è a sua volta manipolabile come un " | ||
===== Namespace ===== | ===== Namespace ===== | ||
- | TO DO: Come si divide il codice in più file.py? | + | Come si divide il codice in più file.py? |
+ | |||
+ | Questi moduli python sono salvati nella sottocartella " | ||
La keyword //global// si usa per definire oggetti globali (meglio usarla solo per le funzioni) | La keyword //global// si usa per definire oggetti globali (meglio usarla solo per le funzioni) | ||
Line 77: | Line 80: | ||
Questa classe servirà al futuro **programmatore** per creare, ogni volta che serve, un oggetto auto. | Questa classe servirà al futuro **programmatore** per creare, ogni volta che serve, un oggetto auto. | ||
Il programmatore, | Il programmatore, | ||
- | < | + | < |
+ | |||
+ | auto1.__class__ | ||
+ | |||
+ | auto1.__doc__ #stampa la documentazione | ||
Ora nella memoria del computer c'è una auto, ma è strana perché non si conosce nulla di quest' | Ora nella memoria del computer c'è una auto, ma è strana perché non si conosce nulla di quest' | ||
Come può il futuro programmatore memorizzare la targa, il prezzo e i restanti attributi di questa auto? Li può specificare tra parentesi in questo modo: | Come può il futuro programmatore memorizzare la targa, il prezzo e i restanti attributi di questa auto? Li può specificare tra parentesi in questo modo: | ||
Line 92: | Line 100: | ||
</ | </ | ||
- | %%__init__()%% è un //attributo metodo// (una funzione) che descrive gli //attributi dato// e la loro inizializzazione. È uno degli attributi metodo più importanti che lo sviluppatore deve preparare. Il programmatore lo usa (senza saperlo) ogni volta che crea un oggetto. | + | - Riassumendo: |
Notare che mentre la chiamata del metodo contiene 3 parametri, nella funzione %%__init__()%% ce ne sono 4... | Notare che mentre la chiamata del metodo contiene 3 parametri, nella funzione %%__init__()%% ce ne sono 4... | ||
Notare anche l' | Notare anche l' | ||
+ | |||
+ | ==== Parametri opzionali ==== | ||
+ | Nel caso in cui chi usa la classe Auto non fornisca la targa, si può attribuirle un valore predefinito. | ||
+ | In caso contrario si solleverebbe un' | ||
+ | |||
+ | def __init__(self, | ||
==== Esempio 2 da terminare ==== | ==== Esempio 2 da terminare ==== | ||
Line 122: | Line 136: | ||
return __saldo | return __saldo | ||
</ | </ | ||
+ | |||
<file python bind01.py> | <file python bind01.py> | ||
# | # | ||
+ | import tkinter as tk | ||
- | class ContoCorrente: | + | class ContoCorrente(tk.Frame): |
- | """ | + | """ |
- | # gli attributi vanno cercati, perche' | + | # gli attributi vanno cercati, perche' |
- | # ad esempio , due attributi sono i due pulsanti | + | # ad esempio , due attributi sono i due pulsanti |
def __init__(self, | def __init__(self, | ||
- | + | super().__init__(master) | |
- | frame = Frame(master, bg=' | + | self.master = master |
- | # container bianco # e' una var. locale di una funzione | + | |
- | # non viene distrutta solo grazie ad un sistema di Tkinter | + | |
- | # che la mantiene in vita... | + | |
- | | + | |
- | | + | |
- | def say_click(self, event): | + | def creare(self): |
- | print "clicked at", event.x, event.y | + | self.var_oggetto = tk.Button(self) |
+ | self.var_oggetto[" | ||
+ | self.var_oggetto.bind('< | ||
+ | self.var_oggetto.pack(side=" | ||
+ | |||
+ | def stampaclick(self, | ||
+ | print("cliccato a ", event.x, event.y | ||
+ | |||
+ | def main(): | ||
+ | root = tk.Tk() | ||
+ | root.geometry(" | ||
+ | app = ContoCorrente(root) # crea altri elementi della finestra genitore | ||
+ | root.mainloop() # loop degli eventi eseguito fino alla chiusura | ||
# programma | # programma | ||
- | + | if __name__ | |
- | root = Tk() # crea la finestra genitore | + | main() |
- | root.geometry(" | + | |
- | + | ||
- | app = App(root) # crea altri elementi della finestra genitore | + | |
- | + | ||
- | root.mainloop() # loop degli eventi eseguito fino alla chiusura | + | |
</ | </ |
appunti3s/creare_classi_e_funzioni_in_python.txt · Last modified: 2020/07/29 18:42 by profpro