Почему при добавлении группы, которую я использовал в качестве аргумента, я получаю ошибку атрибута из-за отсутствия типа - PullRequest
1 голос
/ 10 апреля 2019

Я пытаюсь добавить новый ряд капель дождя в группу спрайтов, когда ряд спрайтов удаляется из группы.Я хотел сделать это с помощью оператора if, чтобы проверить, если во время функции обновления, чтобы увидеть, соответствует ли предыдущий len (группа) len (группа) после удаления.Однако, когда я попытался вызвать атрибут функции в функции before для сравнения в функции after, я получил сообщение, что «AttributeError: NoneType» объект не имеет атрибута «raincount» ».Я некоторое время работал над этим, чтобы заставить его работать, и я надеюсь, что этот последний способ, наконец, позволит мне проверить, когда строка капли дождя будет удалена.

Я попытался передать логическое истинное утверждение из методав классе спрайтов, который удаляет спрайты.Это не удалось, так как он просто генерировал одну каплю для оценки.Я попытался настроить оператор if, не передавая группу (rainfall) в качестве аргумента в функции before.Это не сработало.Я попробовал снова после прохождения дождя в качестве аргумента, и это тоже не сработало.

def dropcount(rainfall):
    raincount = len(rainfall)

def dropground():
    rainchange = len(rainfall)
    rainamt = dropcount(rainfall).raincount
    if (rainamt != rainchange):
        print("This works")
    else:
        print("This does not work")

def update_screen(rainfall):
    screen.fill((135, 206, 235))
    dropcount(rainfall)
    rainfall.update()
    dropground()
    rainfall.draw(screen)
    pygame.display.flip()

Я ожидал, что оператор if будет оцениваться снова и снова в цикле, и когда строка удаляется из группы, тогда оператор оценивается как истинный, и я могу добавить еще одну строку.Вместо этого я получаю

AttributeError: у объекта 'NoneType' нет атрибута 'raincount'

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 10 апреля 2019

dropcount() необходимо вернуть результат:

def dropcount(rainfall):
    return len(rainfall)

Затем вы можете присвоить его переменной:

rainamt = dropcount(rainfall)

Вы не можете использовать .raincount для доступа клокальная переменная внутри функции, этот синтаксис для атрибутов доступа объектов.

Но ваш оператор if никогда не будет успешным.rainamt и rainchange оба len(rainfall), поэтому они никогда не будут разными.Там нет цикла, который меняет длину rainfall.Непонятно, что вы действительно ожидаете от dropground().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...