对象数据中的对象有帮助。(有水果)

时间:2012-04-27 06:56:02

标签: python oop python-3.x object

结果不是我的预期。当guya(一个物体)从manb获得他的柠檬(也是物体)时,他们两个的柠檬增加,然后从它看起来减少1。但是如果你从这个程序中取消注释唯一的注释行,我试图将guyc lemon的计数分配给1000,但这只会将每个人的lemon.quantity设置为1000.发生了什么事?

我的getlemon的目的,在类slasher中,功能是将目标柠檬的数量减少1,并将柠檬的自身数量增加1,但是失败了。我做错了什么?当我试图将guyc.lemon.quantity分配给1时,发生了什么?

class item():
  def __init__(self, x = 0): self.quantity = x
  def set_quantity(self, newquantity): self.quantity = newquantity
class slasher():
  health = 10
  lemon = item(10)
  def getlemon(self, target):#target is the placeholder
    target.lemon.quantity -= 1
    self.lemon.quantity += 1
    target.health -= 1
guya = slasher()
guyb = slasher()
guyc = slasher()
guya.getlemon(guyb)
#guyc.lemon.quantity = 1000
def printit():
  print("guya's lemon count:", guya.lemon.quantity)
  print("guyb's lemon count:", guyb.lemon.quantity)
  print("guyc's lemon count:", guyc.lemon.quantity)
  print("guyb's health:", guyb.health)
printit()

1 个答案:

答案 0 :(得分:2)

在定义类时,

lemon = item(10)只运行一次。所以无论哪个实例 - 您将始终访问同一个对象。

要避免这种情况,请在构造函数中创建对象:

def __init__(self):
    self.lemon = item(10)

您可能希望对health执行相同操作 - 但是,在这种情况下没有必要,因为只要您为obj.health分配内容,就会在实例上设置它(数字是不可变的。 )