2017-08-27 3 views
1

Je viens de taper le code ci-dessous. Je m'attendais à voir cette sortie: "0.5 - 1.5". Mais je vois ceci: "1.5 - 1.5":Ajout de classes personnalisées à la liste dans une autre classe

class ponto: 
    x=0 
    y=0 
    z=0 

class estado: 
    pontos = [] 
    prox_bloco = 1 

#Construir Estado Inicial 
p = ponto() 
p.x = 0.5 
p.y = 0.5 
p.z = 0.5 
init = estado() 
init.pontos.append(p) 
p.x = 1.5 
init.pontos.append(p) 

p1 = init.pontos[0] 
p2 = init.pontos[1] 
print(p1.x,"--",p2.x) 

Quelqu'un pourrait-il expliquer cela et m'aider à le réparer?

Répondre

1

Première: Vous devez utiliser des variables d'instance au lieu de variables de classe:

class ponto: 
    def __init__(self): 
     self.x = 0 
     self.y = 0 
     self.z = 0 

class estado: 
    def __init__(self): 
     self.pontos = [] 
     self.prox_bloco = 1 

Deuxièmement: Lorsque vous changez p.x vous changerez sur l'instance, vous ne créez pas une nouvelle instance de cette façon!

Au lieu de cela, vous devez créer une nouvelle instance (par exemple en utilisant copy.copy or copy.deepcopy), puis changer sur la nouvelle instance:

import copy 

p = ponto() 
p.x = 0.5 
p.y = 0.5 
p.z = 0.5 
init = estado() 
init.pontos.append(p) 
p = copy.copy(p)  # copy "p" 
p.x = 1.5    # set the variable on the copy 
init.pontos.append(p) # append the copy 

p1 = init.pontos[0] 
p2 = init.pontos[1] 
print(p1.x,"--",p2.x) 

Cela donne le résultat attendu:

0.5 -- 1.5