【问题标题】:An object within an object's data help.(With fruit)对象的数据帮助中的对象。(带水果)
【发布时间】:2012-05-07 22:27:36
【问题描述】:

结果出乎我的意料。当guya(一个对象)从guyb那里得到他的柠檬(也是一个对象)时,他们俩的柠檬都增加了,然后减少了1,从表面上看。但是,如果您取消注释该程序中唯一注释的行,我尝试将 guyc lemon 的计数分配为 1000,但这只会将每个人的 lemon.quantity 设置为 1000。这是怎么回事?

我的getlemon的目的,在class 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()

【问题讨论】:

  • 为什么使用set_quantity 方法?使用 getter/setter 不是 Python 的;如果您以后需要这种行为,您可以随时使用属性。
  • 我对财产一无所知,但我会读一读。

标签: python oop python-3.x object


【解决方案1】:

lemon = item(10) 在定义类时只运行一次。因此,无论哪个实例 - 您将始终访问同一个对象。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    相关资源
    最近更新 更多