Forum >> Principianti >> comportamento inaspettato classi

Pagina: 1

Non riesco a darmi una spiegazione del comportamento dello script che segue. Volutamente ridotto al minimo per cercare di capire il problema

class test:

	def __init__(self,prova=[]):

		prova.append("1")

		self.data=prova

a1=test()

print "a1=" ,a1.data

a2=test()

print "a1=",a1.data

print "a2=" ,a2.data

print a2.data





il risultato che viene fuori è


a1= ['1']

a1= ['1', '1']

a2= ['1', '1']


In pratica la seconda istanza della classe test fa riferimento alla stessa variabile prova e non capisco perchè

il tutto funziona se modifico

a1=test() in a1=test(prova=[])

e

a1=test() in a2=test(prova=[])






ciao,ho provato il tuo script con la shell interattiva
se provi a fare :

a1.data is a2.data ti risponde True

significa che non crea un nuovo oggetto ad ogni chiamata, ma usa sempre lo stesso
lo modificherei cosi:

class test():

def __init__(self,prova=1): #tolgo l'append, prima e dopo l'1 ci vogliono le parentesi quadrate
self.data=prova.copy() #creo una copia ad ogni chiamata

a1=test()
a2=test()

a1.data is a2.data #ti risponde False



print (a1.data) #ti risponde 1
print (a2.data)#ti risponde 1









--- Ultima modifica di Ale in data 2015-02-27 15:12:22 ---

--- Ultima modifica di Ale in data 2015-02-27 15:14:15 ---

--- Ultima modifica di Ale in data 2015-02-27 15:35:37 ---
Ciao, la soluzione che ho adottato è
class test:

	def __init__ (self,prova=None):

		if prova==None:

			prova =[]

		prova.append(..quello che serve...)

		self.data=prova



Pagina: 1



Esegui il login per scrivere una risposta.