Могу ли я достать записанный в переменную экземпляр класса и использовать его как мне надо
У меня есть следующий код на Python.
import random
class Unit:
def __init__(self, name_unit, health = 100, damage = 20):
self.name_unit = name_unit
self.health = health
self.damage = damage
unit1 = Unit('Воин 1')
unit2 = Unit('Воин 2')
while unit1.health > 0 or unit2.health > 0:
attacking = f'unit{random.randint(1,2)}'
if attacking == 'unit1':
defending = 'unit2'
else:
defending = 'unit1'
defending.health = int(defending.health) - int(attacking.damage)
print(f'Атаковал {attacking.name}')
Но он работает некорректно и появляется ошибка:
line 22, in <module>
defending.health = int(defending.health) - int(attacking.damage)
AttributeError: 'str' object has no attribute 'health'
Как можно ее исправить?
Ответы (1 шт):
Автор решения: Геннадий П
→ Ссылка
Вам нужно присваивать ссылки на объекты, а не текстовые значения имен. Самое простое в вашем случае изменить код следующим образом:
attacking = unit1 if random.randint(1, 2) == 1 else unit2
if attacking == unit1:
defending = unit2
else:
defending = unit1
В первой строчке присваиваем ссылку на объект unit1 либо unit2 в зависимости от результатов рандома.
Проверяем, правильно ли присваиваются объекты:

PS В print(f'Атаковал {attacking.name}') нужно поменять на attacking.name_unit