2012-04-27 9 views
0

結果は私が期待したものではありません。 guya(オブジェクト)がguybから自分のレモン(オブジェクトも)を取得すると、両方ともレモンが増えていて、それが見た目よりも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() 
+0

なぜ 'set_quantity'メソッドなのでしょうか? getters/settersの使用はpythonicではありません。このような動作が必要な場合は、後でいつでもプロパティを使用できます。 – ThiefMaster

+0

私は財産について何も知らないが、私はそれを読むだろう。 –

答えて

2

lemon = item(10)は、クラスが定義されたときに1回だけ実行されます。したがって、どのインスタンスでも、常に同じオブジェクトにアクセスします。コンストラクタでオブジェクトを作成し、これを回避する

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

あなたはhealthのために同じことをやりたいかもしれない - 以来、できるだけ早くあなたがそれをobj.healthに何かを割り当てるようしかし、それはこの場合には必要はありませんインスタンス上に設定されます(数字は不変です)。

関連する問題