#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)