Lezione15-Le classi in python…

febbraio 8, 2007 at 2:24 pm 11 commenti

Dopo aver introdotto i punti principali della programmazione ad oggetti,vediamo come implementarla in python tramite l’utilizzo delle classi.

Per creare una classe in python scriviamo:

class NomeDellaClasse : se è una “classe madre”(cioè non deriva da altre classi)

class NomeDellaClasse(NomeClasseMadre): se è una “classe figlia”

dopo la dichiarazione del nome della classe,inizializzaremo le variabili(i dati membro) che utilizzaremo nella classe,ed infine sotto i metodi(funzioni) della classe.

Ottenendo una struttura di questo tipo:

class NomeClasse:

{variabili}

{metodi}

oppure

class NomeClasse(ClasseMadre):

{variabili}

{metodi}

Per visualizzare meglio questi concetti passiamo subito ad un’esempio, implementando l’esempio dei computer di un ufficio che abbiamo visto nella lezione precedente:

17

Adesso scriviamo un’altro esempio dove la classe computer è la classe madre :

18

 

Annunci

Entry filed under: Python.

Lezione 14-Introduzione alla programmazione ad oggetti… aggiunta nuova sezione…

11 commenti Add your own

  • 1. Daniele  |  febbraio 8, 2007 alle 6:20 pm

    Mi sembra che ci sia un po’ di confusione, in questi programmini…

    Penso che sarebbero necessarie due parola sugli oggetti e sulla variabile “self”.

    Buon divertimento con Python!

    Daniele

    P.S. Non riesco ad usare il tag “code”

    Rispondi
  • 2. akus85  |  febbraio 8, 2007 alle 6:27 pm

    Mi sembra che ci sia un po’ di confusione, in questi programmini…

    In che senso confusione…

    Rispondi
  • 3. Daniele  |  febbraio 8, 2007 alle 6:35 pm

    Le variabili non vanno “inizializzate” in quel modo, così diventano delle variabili di classe, ma nel tuo esempio non dovrebbe essere così…

    Buon divertimento con Python!

    Daniele

    Rispondi
  • 4. Daniele  |  febbraio 8, 2007 alle 6:37 pm

    Il metodo “cambia_scheda_video()” non credo che funzioni come intendi tu…

    Buon divertimento con Python!

    Daniele

    Rispondi
  • 5. Menphisx  |  febbraio 13, 2007 alle 8:42 pm

    Bisognerebbe evitare di rendere pubbliche le variabili di classe

    Rispondi
  • 6. Daniele  |  febbraio 14, 2007 alle 11:45 am

    Penso che nome_computer, sistema_operativo, ecc. non debbano essere variabili di classe…

    Buon divertimento con Python!

    Daniele

    Rispondi
  • 7. akus85  |  febbraio 14, 2007 alle 12:00 pm


    Penso che nome_computer, sistema_operativo, ecc. non debbano essere variabili di classe…

    Come l’avresti fatto questo esercizio ?

    Rispondi
  • 8. Daniele  |  febbraio 16, 2007 alle 8:55 am

    Ho rielaborato un po’ le tue classi… ma scrivendole qui perdono l’indentazione e risulta difficile capirci qualcosa.

    Non sono riuscito a usare il tag code fin’ora.

    Se mi dai delle indicazioni spedisco il mio esercizio.

    Ciao

    Daniele

    Rispondi
  • 9. akus85  |  febbraio 16, 2007 alle 9:28 am

    per il tag code il codice deve stare tra e nel codice non ci devono essere delle linee vuote…
    oppure(forse è meglio) lo puoi postare nel forum:
    pythonlab

    Rispondi
  • 10. Daniele  |  febbraio 16, 2007 alle 6:18 pm

    Provo a vedere se riesco a pubblicare decentemente il codice:


    #!/usr/bin/python
    # -*- coding: iso-8859-15 -*-
    #-------------------------------python---------------------computer.py--#
    # #
    # Archivio di computer #
    # #
    #--Daniele Zambelli--------------GPL-----------------------------2007---#
    #
    """
    Archivio di computer:
    classi Computer e Personal_computer
    """
    #
    class Computer(object): # Nome che inizia con la maiuscola,
    # deriva dalla classe object
    """Classe che contiene informazioni relative a computer."""

    def __init__(self, nome=None, so=None, ram=None, hd=None):
    """Inizializza gli attributi, gli argomenti sono tutti opzionali."""
    self._nome=nome
    self._so=so
    self._ram=ram
    self._hd=hd
    #
    # Metodi (in questo caso banali) che incapsulano gli attributi
    def getnome(self): return self._nome
    def setnome(self, nome): self._nome=nome
    nome=property(getnome, setnome)
    #
    def getso(self): return self._so
    def setso(self, so): self._so=so
    so=property(getso, setso)
    #
    def getram(self): return self._ram
    def setram(self, ram): self._ram=ram
    ram=property(getram, setram)
    #
    def gethd(self): return self._hd
    def sethd(self, hd): self._hd=hd
    hd=property(gethd, sethd)
    #
    def __str__(self):
    """Metodo che traduce l'oggetto in una stringa."""
    return "Computer: %s caratteristiche: so=%s; ram=%s; hd=%s" % \
    (self.nome, self.so, self.ram, self.hd)
    #
    class Personalcomputer(Computer): # Nome che inizia con la maiuscola,
    # deriva dalla classe object
    """Classe che contiene informazioni relative a computer."""
    #
    def __init__(self, nome=None, so=None, ram=None, hd=None,
    processore=None, skvideo=None, skaudio=None):
    """Inizializza gli attributi, gli argomenti sono tutti opzionali."""
    Computer.__init__(self, nome, so, ram, hd)
    self._processore=processore
    self._skvideo=skvideo
    self._skaudio=skaudio
    #
    # Metodi (in questo caso banali) che incapsulano gli attributi
    def getprocessore(self): return self._processore
    def setprocessore(self, processore): self._processore=processore
    processore=property(getprocessore, setprocessore)
    #
    def getskvideo(self): return self._skvideo
    def setskvideo(self, skvideo): self._skvideo=skvideo
    skvideo=property(getskvideo, setskvideo)
    #
    def getskaudio(self): return self._skaudio
    def setskaudio(self, skaudio): self._saudio=skaudio
    skaudio=property(getskaudio, setskaudio)
    #
    def __str__(self):
    """Metodo che traduce l'oggetto in una stringa."""
    return """PC: %s caratteristiche: so=%s; ram=%s; hd=%s;
    processore=%s; skvideo=%s; skaudio=%s""" % \
    (self.nome, self.so, self.ram, self.hd,
    self.processore, self.skvideo, self.skaudio)
    #
    def test():
    c0=Computer("pippo", "win", 345, 120)
    print c0
    print
    c0.ram=1024
    print c0
    print
    c1=Personalcomputer("pluto", "lin", skaudio="SB")
    print c1
    print
    c1.ram=512
    c1.hd=200
    print c1
    print
    #
    if __name__=="__main__": test()

    Non è molto commentato, ma se servono spiegazioni basta chiedere

    Potrebbe essere interessante scrivere un programma a menu che permetta di aggiungere togliere computer da una lista, stamparli tutti o modificare le caratteristiche di uno.

    Ciao

    Daniele

    Rispondi
  • 11. Daniele  |  febbraio 16, 2007 alle 6:25 pm

    Accidenti, mi è scappata una riga vuota…
    Lo rispedisco sperando in bene…
    Scusate.

    """
    Archivio di computer:
    classi Computer e Personal_computer
    """
    #
    class Computer(object): # Nome che inizia con la maiuscola,
    # deriva dalla classe object
    """Classe che contiene informazioni relative a computer."""
    #
    def __init__(self, nome=None, so=None, ram=None, hd=None):
    """Inizializza gli attributi, gli argomenti sono tutti opzionali."""
    self._nome=nome
    self._so=so
    self._ram=ram
    self._hd=hd
    #
    # Metodi (in questo caso banali) che incapsulano gli attributi
    def getnome(self): return self._nome
    def setnome(self, nome): self._nome=nome
    nome=property(getnome, setnome)
    #
    def getso(self): return self._so
    def setso(self, so): self._so=so
    so=property(getso, setso)
    #
    def getram(self): return self._ram
    def setram(self, ram): self._ram=ram
    ram=property(getram, setram)
    #
    def gethd(self): return self._hd
    def sethd(self, hd): self._hd=hd
    hd=property(gethd, sethd)
    #
    def __str__(self):
    """Metodo che traduce l'oggetto in una stringa."""
    return "Computer: %s caratteristiche: so=%s; ram=%s; hd=%s" % \
    (self.nome, self.so, self.ram, self.hd)
    #
    class Personalcomputer(Computer): # Nome che inizia con la maiuscola,
    # deriva dalla classe object
    """Classe che contiene informazioni relative a computer."""
    #
    def __init__(self, nome=None, so=None, ram=None, hd=None,
    processore=None, skvideo=None, skaudio=None):
    """Inizializza gli attributi, gli argomenti sono tutti opzionali."""
    Computer.__init__(self, nome, so, ram, hd)
    self._processore=processore
    self._skvideo=skvideo
    self._skaudio=skaudio
    #
    # Metodi (in questo caso banali) che incapsulano gli attributi
    def getprocessore(self): return self._processore
    def setprocessore(self, processore): self._processore=processore
    processore=property(getprocessore, setprocessore)
    #
    def getskvideo(self): return self._skvideo
    def setskvideo(self, skvideo): self._skvideo=skvideo
    skvideo=property(getskvideo, setskvideo)
    #
    def getskaudio(self): return self._skaudio
    def setskaudio(self, skaudio): self._saudio=skaudio
    skaudio=property(getskaudio, setskaudio)
    #
    def __str__(self):
    """Metodo che traduce l'oggetto in una stringa."""
    return """PC: %s caratteristiche: so=%s; ram=%s; hd=%s;
    processore=%s; skvideo=%s; skaudio=%s""" % \
    (self.nome, self.so, self.ram, self.hd,
    self.processore, self.skvideo, self.skaudio)
    #
    def test():
    c0=Computer("pippo", "win", 345, 120)
    print c0
    print
    c0.ram=1024
    print c0
    print
    c1=Personalcomputer("pluto", "lin", skaudio="SB")
    print c1
    print
    c1.ram=512
    c1.hd=200
    print c1
    print
    #
    if __name__=="__main__": test()

    Ciao

    Daniele

    Rispondi

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Trackback this post  |  Subscribe to the comments via RSS Feed


IL FORUM E’ ATTIVO..!!!

pythonlab adesso ha il suo forum all'indirizzo: Pythonlab-forum

Python s60..

8.MODULO E32 21-03-07 Ultimo aggiornamento

Blog Stats

  • 87,437 hits

Archivi

Aggiunta chat…


%d blogger hanno fatto clic su Mi Piace per questo: