2012-04-27 35 views
0

結果不是我所期望的。當guya(一個物體)從guyb獲得他的檸檬(也是物體)時,他們兩個人的檸檬都增加了,然後減少了1,看起來似乎。但是,如果您取消該計劃中唯一評論的評論,我試圖將guyc檸檬的數量指定爲1000,但這隻會將每個人的檸檬數量設置爲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() 
+0

爲什麼'set_quantity'方法?使用getters/setter不是pythonic;如果你以後需要這樣的行爲,你總是可以使用一個屬性。 – ThiefMaster 2012-04-27 07:06:50

+0

我對財產一無所知,但我會讀它。 – 2012-04-27 09:08:27

回答

2

lemon = item(10)運行正好一次,當類被定義。所以無論哪個實例 - 你總是會訪問同一個對象。只要你分配東西obj.health它然而,它沒有必要在這種情況下,因爲 -

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

你可能想爲health做同樣的:

爲了避免這種情況,在構造函數中創建對象將在實例上設置(數字是不可變的)。