2012-04-27 1 views
0

Результат не тот, который я ожидал. Когда guya (объект) получает свой лимон (также объект) от парня, у обоих из них были увеличены лимоны, а затем уменьшены на 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'? Использование геттеров/сеттеров не является питоническим; если вам когда-нибудь понадобится такое поведение, вы всегда можете использовать свойство. – ThiefMaster

+0

Я ничего не знаю о собственности, но я ее прочитаю. –

ответ

2

lemon = item(10) работает ровно один раз, когда класс определен. Поэтому независимо от того, какой экземпляр - вы всегда будете обращаться к одному и тому же объекту.

Чтобы избежать этого, создать объект в конструкторе:

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

Вы можете сделать то же самое для health - однако, это не нужно в этом случае, так как только вы назначаете что-то obj.health его (числа неизменяемы.)

Смежные вопросы