【发布时间】:2014-09-21 20:58:40
【问题描述】:
我遇到了一个特殊的问题,即对象内部的值被设置为我在以后的新实例中将该变量设置为的任何值。让我先试着用一个例子来解释一下我得到的结果 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 我有一个调试打印测试,它写入 tempTray 的 2 个值的内容,并且此时包含正确的信息,但是如果我在 # 检查点 2 再次检查相同的东西,现在它们变成设置为xml文件加载的最后一个托盘中的任何内容(我尝试查看所有4个托盘,而不仅仅是self.AllTrays [0],它们都具有相同的值)我还排除了我的xml文件与当前更改一起保存。
任何解决方案或变通方法?我以前遇到过这种情况,但没有一致性(一种纸牌游戏,其中纸牌数据正确地从文件中加载,但每个玩家都被设置为名称“玩家 2”,如果我更改其中任何一个,他们的得分值都会上升和下降他们的分数)
【问题讨论】:
-
您需要向我们展示您的
Dog类的定义。很可能您将Dog.Name设置为类级别属性而不是实例属性。 -
与其转换问题,你能展示你实际的最小python代码来帮助我们重现问题吗?
-
将
Dog的name属性移动到__init__中 -
与您的问题无关,但您的代码很难阅读:请遵守PEP8,变量和属性使用
lower_case_with_underscore,类保留CamelCase。 -
如果“实际代码”不能足够重现,则它是不完整的。请参阅stackoverflow.com/help/mcve 或sscce.org,了解有关编写足以让其他人诊断您的问题的复制器的指南。
标签: python class oop object nested