Forum
>>
Principianti
>>
comportamento inaspettato classi
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da francescopy |
2015-02-27 07:17:11 - comportamento inaspettato classi
|
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=[]) |
|
Scritto da Ale |
2015-02-27 15:10:03 - Re: comportamento inaspettato classi
|
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 --- |
|
Scritto da francescopy |
2015-02-27 22:31:46 - Re: comportamento inaspettato classi
|
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.