<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'Droid Sans'; font-size:9pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">HOW-TO Programmare in Python - Parte 4<br />Scritto da Greg Walters<br /><br />Vi avevo promesso che avremmo parlato delle classi. Così, ecco su cosa ci concentreremo. Cosa sono le classi e a che cosa servono?<br /><br />La classe è un mezzo per la costruzione di oggetti. Un oggetto è semplicemente un modo di raggruppare attributi e comportamenti. So che sembra confuso, ma continuiamo. Ragionate in questo modo. Un oggetto è un modello di qualcosa del mondo reale. La classe è una via per implementarlo. Per esempio, a casa ho tre cani. Un Beagle, un Labrador e un Pastore Tedesco/Blue Heeler. Tutti sono cani, ma sono anche differenti tra loro. Accanto ad attributi comuni, troviamo anche differenze. Per esempio, il Beagle è piccolo, grassottello, marrone e irritabile. Il Labrador è di taglia media, nero e tranquillo. Il Pastore è alto, magro, nero e un pò pazzerello. Ovviamente, alcuni attributi sono ovvi. Piccolo/taglia media/alto sono tutti attributi collegati all'altezza. Irritabile/tranquillo/pazzerello sono attributi dell'umore. Dal punto dei vista dei comportamenti, possiamo considerare mangiare, dormire, giocare, e altre azioni.<br /><br />Tutti e tre saranno della classe 'Cane'. Considerando gli attributi usati per descriverli, potremmo usare Cane.Nome, Cane.Altezza, Cane.Corporatura (magro,grassottello, ecc.) e Cane.Colore. Poi abbiamo i comportamenti come Cane.Abbaia, Cane.Mangia,Cane.Dormi, e così via.<br /><br />Come detto prima, i tre cani sono di razze distinte. Ciascuna razza sarà una sottoclasse della classe Cane. In un diagramma, sarebbero così rappresentati.<br /><br /><span style=" font-family:'Courier New';">       /--Beagle<br />Dog ---|--Labrador<br />       \--Pastore/Heeler<br /><br /></span>Ciascuna sottoclasse eredita gli attributi della classe Cane. Quindi, se creiamo una istanza di Beagle, essa erediterà tutti gli attributi dalla sua classe genitore, Cane.<br /><br /><span style=" font-family:'Courier New';">Beagle = Cane()<br />Beagle.Nome = 'Archie'<br />Beagle.Altezza = 'Piccolo'<br />Beagle.Corporatura = 'Grassottello'<br />Beagle.Colore = 'Marrone'</span><br /><br />Inizia ad avere senso? Allora, creiamo la nostra classe Cane (mostrata sopra). Inizieremo con la parola chiave "class" e il nome della classe.<br /><br /><span style=" font-family:'Courier New';">class Cane():<br />    def __init__(self,nomecane,colorecane,altezzacane,corporaturacane,umorecane,etacane):<br />        #qui imposteremo gli attributi del nostro cane<br />        self.nome = nomecane<br />        self.colore = colorecane<br />        self.altezza = altezzacane<br />        self.corporatura = corporaturacane<br />        self.umore = umorecane<br />        self.eta = etacane<br />        self.Affamato = False<br />        self.Stanco = False</span><br /><br />Prima di procedere ulteriormente, osservare le funzioni definite. La funzione  __init__ (due underscore + 'int' + due underscore) è di inizializzazione ed è usabile in ogni classe. Questa routine è la prima ad essere eseguita chiamando la classe. In questo caso abbiamo usato una serie di parametri per impostarne alcune semplici informazioni; abbiamo le variabili nome, colore, altezza, corporatura, umore, età, affamato e stanco. Ci ritorneremo su a breve. Ora aggiungiamo altro codice.<br /><br /><span style=" font-family:'Courier New';">Beagle = Cane('Archie','Marrone','Piccolo','Grassottello','Irritabile',12)<br />print Beagle.nome<br />print Beagle.colore<br />print Beagle.umore<br />print Beagle.Affamato</span><br /><br />Si tratta di codice NON INDENTATO che risiede al di fuori della classe. Con la prima riga si crea una istanza della classe cane chiamata Beagle. Nel farlo, abbiamo passato delle informazioni come il nome, il colore, ecc, del Beagle. Le quattro righe successive servono a recuperare le informazioni. Ancora altro codice. Aggiungete alla classe le righe del riquadro in alto a destra, dopo la funzione __init__.<br /><br /><span style=" font-family:'Courier New';">def Mangia(self):<br />    if self.Affamato:<br />        print 'Yum Yum...Num Num'<br />        self.Affamato = False<br />    else:<br />        print 'Sniff Sniff...Non ho fame'<br />def Dormi(self):<br />    print 'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ'<br />    self.Stanco = False</span><br /><br />Le possiamo richiamare con Beagle.Mangia() o Beagle.Dormi(). Aggiungiamo un altro metodo. Lo chiameremo Abbaia. Il suo codice è mostrato a destra.<br /><br /><span style=" font-family:'Courier New';">def Abbaia(self):<br />    if self.umore == 'Irritabile':<br />        print 'GRRRRR...Woof Woof'<br />    elif self.umore == 'Tranquillo':<br />        print 'Yawn...ok...Woof'<br />    elif self.umore == 'Pazzerello':</span><br /><span style=" font-family:'Courier New';">        print 'Abbaia Abbaia Abbaia Abbaia Abbaia'<br />    else:<br />        print 'Woof Woof'</span><br /><br />Questa l'ho resa più flessibile. A seconda dell'umore del cane, il guaito cambierà. Nella prossima pagina c'è l'intero codice della classe.<br /><br />Così, eseguendolo otterremo:<br /><br /><span style=" font-family:'Courier New';">Mi chiamo Archie<br />Il mio colore è Marrone<br />Il mio umore è Irritabile<br />Ho fame = False<br />Sniff Sniff...Non ho fame<br />Yum Yum...Num Num<br />GRRRRR...Woof Woof</span><br /><br />Questo è quanto per il vecchio <span style=" font-family:'Verdana';">Irritabile</span> Beagle. Però, prima avevo detto di avere 3 cani. Dato che abbiamo creato la classe con cura, quello che ci resta da fare è crearne altre due istanze.<br /><br /><span style=" font-family:'Courier New';">Labrador = Cane('Nina','Nero','Media','Pesante','Tranquillo',7)<br />Pastore = Cane('Bear','Nero','Alto','Magro','Pazzerello',9)<br />print 'Mi chiamo %s' % Labrador.nome<br />print 'Il mio colore è %s' % Labrador.colore<br />print 'Il mio umore è %s' %</span> <span style=" font-family:'Courier New';">Labrador.umore<br />print 'Ho fame = %s" % Labrador.Affamato</span><br /><span style=" font-family:'Courier New';">Labrador.Abbaia()<br />Pastore.Abbaia()</span><br /><br />Notate come abbia creato le istanze di entrambi i cani prima delle istruzioni print. Non è un problema, perché ho "definito" le istanze prima di aver chiamato uno dei metodi. Ecco l'output di tutto il programma:<br /><br /><span style=" font-family:'Courier New';">Mi chiamo Archie<br />Il mio colore è Marrone<br />Il mio umore è Irritabile<br />Ho fame = False<br />Sniff Sniff...Non ho fame<br />Yum Yum...Num Num<br />GRRRRR...Woof Woof<br />Mi chiamo Nina<br />Il mio colore è Nero<br />Il mio umore è Tranquillo<br />Ho fame = False<br />Yawn...ok...Woof<br />Abbaia Abbaia Abbaia Abbaia Abbaia<br /></span><br />Ora che avete le basi, il vostro compito sarà espandere la classe per includere nuovi metodi, come Gioca o IncontraCaneStrano o simili.<br /><br />La prossima volta discuteremo della programmazione di GUI o Interfaccia Grafica Utente. Useremo per lo scopo Boa Constructor.<br /><br /><span style=" font-family:'Courier New';">class Cane():<br />    def __init__(self,nomecane,colorecane,altezzacane,corporaturacane,umorecane,etacane):<br />        #qui imposteremo gli attributi del nostro cane<br />        self.nome = nomecane<br />        self.colore = colorecane<br />        self.altezza = altezzacane<br />        self.corporatura = corporaturacane<br />        self.umore = umorecane<br />        self.eta = etacane<br />        self.Affamato = False<br />        self.Stanco = False<br /><br />    def Mangia(self):<br />        if self.Affamato:<br />            print 'Yum Yum...Num Num'<br />            self.Affamato = False<br />        else:<br />            print 'Sniff Sniff...Non ho fame'<br /><br />    def Dormi(self):<br />        print 'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ'<br />        self.Stanco = False<br /><br />    def Abbaia(self):<br />        if self.umore == 'Irritabile':<br />            print 'GRRRRR...Woof Woof'<br />        elif self.umore == 'Tranquillo':<br />            print 'Yawn...ok...Woof'<br />        elif self.umore == 'Pazzerello':</span><br /><span style=" font-family:'Courier New';">            print 'Abbaia Abbaia Abbaia Abbaia Abbaia'<br />        else:<br />            print 'Woof Woof'<br /><br />Beagle = Cane('Archie','Marrone','Piccolo','Grassottello','Brontolone',12)<br />print 'Mi chiamo %s' % Beagle.nome<br />print 'Il mio colore è %s' % Beagle.colore<br />print 'Il mio umore è %s' % Beagle.umore<br />print 'Ho fame = %s' % Beagle.Affamato<br />Beagle.Mangia()<br />Beagle.Affamato = True<br />Beagle.Mangia()<br />Beagle.Abbaia()<br /></span><br /><br />Greg Walter è il proprietario della RainyDay Solutions, LLC, una società di consulenza in Aurora, Colorado e programma dal 1972. Ama cucinare, fare escursioni, ascoltare musica e passare il tempo con la sua famiglia.<br /></p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;"></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">-- </p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">Giuseppe Calà</p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">OpenPGP key: 0x749487B5</p>
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;"></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">Cartella pubblica Google Docs, traduzioni FCM:</p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; -qt-user-state:0;">https://docs.google.com/leaf?id=0B3roauHJ2VmzMGQ1NWM1OTYtZTEyNC00NDMwLWIzYjAtMDdhMWIwOTE0ZjVl&amp;amp;hl=it</p></body></html>