Lezione15-Le classi in python…
Febbraio 8, 2007
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:
Adesso scriviamo un’altro esempio dove la classe computer è la classe madre :
Entry Filed under: Python. .
11 Comments Add your own
Leave a Comment
Some HTML allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
Trackback this post | Subscribe to the comments via RSS Feed
1.
Daniele | Febbraio 8, 2007 at 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”
2.
akus85 | Febbraio 8, 2007 at 6:27 pm
Mi sembra che ci sia un po’ di confusione, in questi programmini…
In che senso confusione…
3.
Daniele | Febbraio 8, 2007 at 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
4.
Daniele | Febbraio 8, 2007 at 6:37 pm
Il metodo “cambia_scheda_video()” non credo che funzioni come intendi tu…
Buon divertimento con Python!
Daniele
5.
Menphisx | Febbraio 13, 2007 at 8:42 pm
Bisognerebbe evitare di rendere pubbliche le variabili di classe
6.
Daniele | Febbraio 14, 2007 at 11:45 am
Penso che nome_computer, sistema_operativo, ecc. non debbano essere variabili di classe…
Buon divertimento con Python!
Daniele
7.
akus85 | Febbraio 14, 2007 at 12:00 pm
Penso che nome_computer, sistema_operativo, ecc. non debbano essere variabili di classe…
Come l’avresti fatto questo esercizio ?
8.
Daniele | Febbraio 16, 2007 at 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
9.
akus85 | Febbraio 16, 2007 at 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
10.
Daniele | Febbraio 16, 2007 at 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
11.
Daniele | Febbraio 16, 2007 at 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