Python говорит, что функция не определена, несмотря на то, что была определена только двумя строками выше - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть этот класс:

class Demo():

    ############################### Drawing functions

    SCREEN_OFFSETX, SCREEN_OFFSETY = SCREEN_WIDTH/16, SCREEN_HEIGHT

    def fix_vertices(vertices):
        return [(int(SCREEN_OFFSETX + v[0]), int(SCREEN_OFFSETY - v[1])) for v in vertices]

    def draw_polygon(polygon, screen, body, fixture):
        transform = body.transform
        vertices = fix_vertices([transform * v * PPM for v in polygon.vertices])
        pygame.draw.polygon(
            screen, [c / 2.0 for c in colors[body.type]], vertices, 0)
        pygame.draw.polygon(screen, colors[body.type], vertices, 1)
    polygonShape.draw = draw_polygon
    ''''
    Do other stuff...
    ''''

, и я запускаю его, используя следующие строки кода:

Car = Demo()
if __name__ == "__main__":
    Car
    print("It Works")

Но когда я пытаюсь запустить его, я получаю сообщение об ошибке fix_vertices_ не определено ... как я могу это исправить?

Большое спасибо

PS и другой подвопрос ... это правильный способ вызова этого класса с использованием

if __name__ == "__main__"

синтаксис или есть лучший способ, например

if __name__ == "__main__":
    main(Demo)

Большое спасибо

Ответы [ 2 ]

2 голосов
/ 06 февраля 2020

Но когда я пытаюсь запустить его, у меня появляется ошибка, что fix_vertices_ не определено ... как я могу это исправить?

Вы определили fix_vertices как метод , но пытаемся вызвать его как свободную функцию . Выберите один или другой.

PS и другой подзапрос ... это правильный способ вызова этого класса с использованием синтаксиса

if __name__ == "__main__"

или есть лучший способ для пример

if __name__ == "__main__":
     main(Demo)

Большое спасибо

Не совсем понятно, каков ваш вопрос. if __name__ == "__main__" полезен для предоставления пакетов, которые можно импортировать и выполнять, поскольку наличие «основной функции» не является необходимым, но может быть удобно для правильного определения объема.

0 голосов
/ 06 февраля 2020

Demo - это класс, если вы собираетесь использовать метод класса, такой как fix_vertices, внутри другого метода класса, такого как draw_polygon, вам нужно вместо этого использовать ключевое слово self.(method) наподобие self.fix_vertices. Попробуйте прочитать, как создавать классы.

Кроме того, оператор if __name__ == '__main__': должен отделить объявление функций и классов от их использования и реализации. Вы должны создать объект Demo внутри оператора if не раньше, поэтому ваш модуль не выполняет ничего при импорте.

...