Могу ли я достать записанный в переменную экземпляр класса и использовать его как мне надо

Рейтинг: 0Ответов: 1Опубликовано: 17.03.2023

У меня есть следующий код на 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'

Как можно ее исправить?

Ответы

▲ 0Принят

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

    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