Как изменить значения в классе из функции?

#python

#python

Вопрос:

 class Rock:
    def __init__(self, length, width):
        self.length = length
        self.width = width
    def move(length):
        length = length   1


rock1 = Rock(100,300)
rock2 = Rock(300,500)
rocklist = [rock1,rock2]
gameover = 1
counter = 0
while gameover == 1:
    for i in rocklist:
        move(i.length)
        print(length)
  

При запуске этого, length остается тем же самым, как продемонстрировано print . Как я могу изменить значения с помощью функции?

Комментарии:

1. Вы не пытаетесь изменить значения из функции. Вы также печатаете length , а не i.length , что должно вызывать NameError , поскольку на данный момент оно не определено.

Ответ №1:

Для всех методов объекта существует объект self , который ссылается на сам объект:

 def move(self, movement_amount):
    self.length  = movement_amount

  

Вы можете вызывать объектные методы из самого объекта:

 rock1 = Rock(100,300)
rock1.move(1)  # Increase the length of this object by 1
  

В вашем случае:

 while gameover == 1:
    for rock in rocklist:
        rock.move(1)
        print(rock.length)
  

Комментарии:

1. Возможно, вы также захотите отметить, как вызывать методы, поскольку они выполняют move(rock.length) вместо rock.move(length)

Ответ №2:

Вы можете создать функцию перемещения как функцию класса, а затем использовать ее для каждого объекта rock. Вот как будет выглядеть структура кода:

 class Rock:
    def __init__(self, length, width):
        self.length = length
        self.width = width

    def move(self):
        self.length = self.length   1

rock1 = Rock(100,300)
rock2 = Rock(300,500)
rocklist = [rock1,rock2]
gameover = 1
counter = 0
while gameover == 1:
    for rock in rocklist:
        rock.move()
        print(rock.length)