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.
  