0

結果は私が期待したものではありません。guya (オブジェクト) が guyb から自分のレモン (オブジェクトでもある) を取得すると、見た目から、両方のレモンが増加してから 1 減少しました。しかし、このプログラムから唯一のコメント行のコメントを外すと、guyc lemon のカウントを 1000 に割り当てようとしましたが、全員の lemon.quantity が 1000 に設定されただけです。何が起こっているのでしょうか?

ゲレモン、クラススラッシャーの機能の目的は、対象のレモンの量を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()
4

1 に答える 1

2

lemon = item(10)クラスが定義されると、1回だけ実行されます。したがって、どのインスタンスに関係なく、常に同じオブジェクトにアクセスします。

これを回避するには、コンストラクターでオブジェクトを作成します。

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

同じことを行うこともできますがhealth、この場合は、何かを割り当てるとすぐにobj.healthインスタンスに設定されるため、必要ありません(番号は不変です)。

于 2012-04-27T07:04:43.053 に答える