AttributeError: 'Sprite' object has no attribute 'type'

Сразу обозначу, что в самом python я, к сожалению, не профи
Делаю мини-игру по гайду с проверкой реакции(что-то похожее есть в игре Dead by Daylight). Рассчитывалось, что картинка slider.png будет двигать по размерам slider_bar_size вправо, а затем влево, но выдало ошибку "AttributeError: 'Sprite' object has no attribute 'type'". Подскажите пожалуйста, как это можно исправить?

(Код записан в разных файлах)

init python:
    def slider_update(st):
        global slider_speed

        for sprite in slider_sprites:
            if sprite.type == "slider":
                if round(sprite.x) < slider_bar_size[0] - slider_size[0] and sprite.direction == "right":
                    sprite.x += slider_speed * Exam_difficulty
                    slider_speed += 0.04

                elif round(sprite.x) >= slider_bar_size[0] - slider_size[0] and sprite.direction == "right":
                    sprite.direction = "left"
                    slider_speed = 2

                elif round(sprite.x) > 0 and sprite.direction == "left":
                    sprite.x -= slider_speed * Exam_difficulty
                    slider_speed += 0.04

                elif round(sprite.x) == 0 and sprite.direction == "left":
                    sprite.direction = "right"
                    slider_speed = 2

        if not slider_stop:
            return 0
        else:
            return None
label Arena_Exam_1:
    $ slider_SM = SpriteManager(update = slider_update)

    $ slider_sprites = []

    $ safe_zone_image = Image("images/BG/Arena/safe-zone.png")
    $ safe_zone_size = (149, 70)
    $ slider_sprites.append(slider_SM.create(safe_zone_image))
    $ slider_sprites[-1].type = "safe-zone"

    $ slider_sprites[-1].type = "slider"
    $ slider_sprites[-1].direction = "right"
    $ slider_bar_size = (545, 70)
    $ slider_image = Image("images/BG/Arena/slider.png")
    $ slider_sprites.append(slider_SM.create(slider_image))
    $ slider_size = (48, 66)

    $ slider_speed = 2 #Скорость движения палочки
    $ slider_stop = False

    $ Exam_Attempts = 3
    $ Exam_difficulty = 1

    show text "{size=60}Get ready!?\n{size=50}\n{size=20}{color=#979797}click . . ."
    pause
    hide text
    call screen Arena_Exam_1_1

(Ошибка)

While running game code:
  File "game/SCRIPTS/MiniGames.rpy", line 514, in script
    call screen Arena_Exam_1_1
  File "renpy/common/000statements.rpy", line 670, in execute_call_screen
    store._return = renpy.call_screen(name, *args, **kwargs)
  File "game/SCRIPTS/variables.rpy", line 49, in slider_update
    if sprite.type == "slider":
AttributeError: 'Sprite' object has no attribute 'type'

Ответы (1 шт):

Автор решения: CrazyElf
    $ slider_sprites.append(slider_SM.create(safe_zone_image))
    $ slider_sprites[-1].type = "safe-zone"

    $ slider_sprites[-1].type = "slider"
...
    $ slider_sprites.append(slider_SM.create(slider_image))

А зачем вы одному слайдеру присваиваете два разных типа, а другому - ни одного? Тогда уж так, хотя код всё-равно коряво выглядит:

    $ slider_sprites.append(slider_SM.create(safe_zone_image))
    $ slider_sprites[-1].type = "safe-zone"
...
    $ slider_sprites.append(slider_SM.create(slider_image))
    $ slider_sprites[-1].type = "slider"

Вообще лучше оперировать объектами ещё до того, как они в список попадут, так меньше шансов ошибиться:

    $ safe_zone_sprite = slider_SM.create(safe_zone_image)
    $ safe_zone_sprite.type = "safe-zone"
    $ slider_sprites.append(safe_zone_sprite)
...
    $ slider_sprite = slider_SM.create(slider_image)
    $ slider_sprite.type = "slider"
    $ slider_sprites.append(slider_sprite)

Правда, во втором случае название списка и элемента слишком похожи, что тоже может привести к ошибке. Я бы список переименовал как-то, ведь там разные спрайты, а не только слайдер.

→ Ссылка