将自定义类附加到另一个类中列出

时间:2017-08-27 13:02:19

标签: python list class object append

我刚输入以下代码。我希望看到这个输出:“0.5 - 1.5”。但我看到了这个:“1.5 - 1.5”:

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)

任何人都可以解释这个并帮我修复它吗?

1 个答案:

答案 0 :(得分:1)

首先:您应该使用实例变量而不是类变量:

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

第二:当您更改p.x时,您将在实例上更改它,您不会以这种方式创建新实例!

相反,您应该创建一个新实例(例如使用copy.copy or copy.deepcopy),然后在新实例上更改它:

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)

这给出了预期的结果:

0.5 -- 1.5