Python所有对象都会更改,如果其中一个

Python所有对象都会更改,如果其中一个,python,class,oop,object,nested,Python,Class,Oop,Object,Nested,我遇到了一个特殊的问题,即在以后的新实例中,对象中的值被设置为我设置该变量的任何值。让我先用一个例子来解释一下,doc.python.org给出的关于如何使用类对象的例子会得到什么样的结果 b = Dog("Buddy") e = Dog("Spot") b.Name e.Name 对我来说,给出了 Spot Spot 在一些调试行的帮助下,我发现这种现象在退出for循环时发生。这是我的实际代码和结果: tempTray = Tray("{0}:{1}".format(UnitName, T

我遇到了一个特殊的问题,即在以后的新实例中,对象中的值被设置为我设置该变量的任何值。让我先用一个例子来解释一下,doc.python.org给出的关于如何使用类对象的例子会得到什么样的结果

b = Dog("Buddy")
e = Dog("Spot")
b.Name
e.Name
对我来说,给出了

Spot
Spot
在一些调试行的帮助下,我发现这种现象在退出for循环时发生。这是我的实际代码和结果:

tempTray = Tray("{0}:{1}".format(UnitName, TrayName))
for eachDish in range(len(tempTray.GridSizes)):
  if Row1.find("[") > -1:
    Parse = Row1[Row1.find("[")+1:Row1.find("]")]
    Row1 = Row1[Row1.find("]")+1:]
  elif Row2.find("[") > -1:
    Parse = Row2[Row2.find("[")+1:Row2.find("]")]
    Row2 = Row2[Row2.find("]")+1:]
  elif Row3.find("[") > -1:
    Parse = Row3[Row3.find("[")+1:Row3.find("]")]
    Row3 = Row3[Row3.find("]")+1:]

  if Parse != "Empty":        
    tempTray.GridSizes[eachDish]  = Parse[:Parse.find(" ")]
    tempTray.GridColors[eachDish] = self.Colors[Parse[Parse.find(" ")+1:]]
    # Check point 1
self.AllTrays.append(tempTray)
# Check point 2
在#检查点1,我有一个调试打印测试,该测试写入了Tettray的2个值的内容,并且在这一点上包含了正确的信息,但是如果我在#检查点2再次检查相同的内容,现在它们会被设置为xml文件加载的最后一个托盘中的任何内容(我已经尝试查看了所有4个托盘,而不仅仅是self.alltails[0],它们都有相同的值)我还排除了使用当前更改保存xml文件的可能性


有什么解决办法或变通办法吗?我以前遇到过这种情况,但没有一致性(这是一种纸牌游戏,纸牌数据从文件中正确加载,但每个玩家都被设置为“玩家2”,如果我更改了他们的任何一个分数,他们的分数值都会上下波动)

最好看看你的
类定义的实际代码。很可能您已经创建了
Name
a(Python文档实际上使用了
Dog
类来显示差异)


Python文档实际上有一个非常简短而甜蜜的解释;因此,我建议你阅读它,如果需要的话,问更多的问题。

你需要向我们展示你的
狗的定义。很可能您正在将
Dog.Name
设置为类级属性,而不是实例属性。您是否可以显示可以帮助我们重现问题的实际最小python代码?将
Dog
Name
属性移到与您的问题无关的
\uuu init\uuuu
中,但是您的代码很难阅读:请遵守PEP8,对变量和属性使用带下划线的
lower\u case\u,对类保留
CamelCase
。如果“实际代码”不足以重现,则它是不完整的。请参阅或以获取有关编写复制器的指南,这些复制器足以让其他人诊断您的问题。谢谢。根据你的回答,我猜你没有读到或理解我为什么把狗课包括在内。我这样做是因为我是从链接中的示例中进行示例的。然而,这是正确的,当我想要一个实例变量时,我使用了一个类变量。