LinuxLudus: Python-domande varie

Federico Ramponi federico.ramponi@gmail.com
Mar 27 Maggio 2008 14:17:11 CEST


2008/5/27 Valerio Pachera <sirio81@gmail.com>:
> class frutta(self,colore):
>  self.colore=colore
>
>  def marcire():
>    self.colore="nero"
>
> banana = frutta("giallo")
> fragola = frutta("rosso")
>
Ehmmm...
Mah?
Boh...

Beh,
eccoti un esempietto correlato alla lontana, e con una semantica un
pochino diversa. C'e` un po' di roba macchinosa, divertiti:

class Frutto(object):
	def __init__(self):
		object.__init__(self)
	def marcisci(self):
		self.colore = "nero"

class Banana(Frutto):
	def __init__(self):
		Frutto.__init__(self)
		self.colore = "giallo"

class Fragola(Frutto):
	def __init__(self):
		Frutto.__init__(self)
		self.colore = "rosso"


frutta = [Banana, Fragola]
	# Array di classi
nomi   = [f.__name__.upper() for f in frutta]
	# Array dei rispettivi nomi ["BANANA", "FRAGOLA"]

cestino = []
while True:
	print "Che frutto desideri? ",
	nome = raw_input().upper()
	if nome == "FINITO":
		break
	try:
		cestino.append( frutta[ nomi.index(nome) ]() )
		# nomi.index(nome) e` l'indice che, poniamo, "BANANA" ha all'interno
dell'array
		# la classe Banana deve avere lo stesso indice all'interno del suo array
		# frutta[ nomi.index(nome) ] e` proprio la classe Banana
		# frutta[ nomi.index(nome) ]() e` un nuovo oggetto di quella classe
	except ValueError:
		# Se il nome non e` stato trovato
		print "Non abbiamo alcuna %s" % nome

print "Ecco i colori dei frutti che hai scelto:"
for frutto in cestino:
	print frutto.colore
	# Polimorfismo
	# Non sappiamo i colori; li ha implicitamente scelti l'utente
	# scegliendo che oggetti istanziare

print "Ora marciscono..."
for frutto in cestino:
	frutto.marcisci()

print "Ecco i colori alla fine:"
for frutto in cestino:
	print frutto.colore
	# Adesso devono essere tutti neri

ciao,
r.


Maggiori informazioni sulla lista linuxludus