【问题标题】:Python all objects changed if one is [closed]如果一个对象[关闭],Python所有对象都已更改
【发布时间】: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代码来帮助我们重现问题吗?
  • Dogname属性移动到__init__
  • 与您的问题无关,但您的代码很难阅读:请遵守PEP8,变量和属性使用lower_case_with_underscore,类保留CamelCase
  • 如果“实际代码”不能足够重现,则它是不完整的。请参阅stackoverflow.com/help/mcvesscce.org,了解有关编写足以让其他人诊断您的问题的复制器的指南。

标签: python class oop object nested


【解决方案1】:

很高兴看到Dog 类定义的实际代码。很有可能您已经将Name 设为class variable as opposed to an instance variable(Python 文档实际上使用Dog 类来显示差异)。

Python 文档实际上对Class and Instance Variables 有一个简短而优美的解释;所以,我建议你阅读它并在需要时提出更多问题。

【讨论】:

  • 谢谢。根据您的回复,我猜您没有阅读或理解我为什么包含 Dog 类。我这样做是因为我正在从链接中的示例中进行示例。然而这是正确的,我使用的是类变量,而我想要一个实例变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多