【问题标题】:Appending custom classes to list in another class将自定义类附加到另一个类中的列表
【发布时间】:2018-02-04 21:52:07
【问题描述】:

我刚刚输入了下面的代码。我希望看到这个输出:“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)

谁能解释一下并帮我解决这个问题?

【问题讨论】:

    标签: python list class object append


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2021-02-05
      • 2012-02-17
      • 2020-11-12
      • 1970-01-01
      • 2016-01-16
      • 2017-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多