__init__() получил неожиданный аргумент ключевого слова 'text'

Я программировал из книги Python для абсолютных новичков, используя Python 3.3.1.

Я пытаюсь добавить текст на экран, используя следующий код. Мне нужно остаться в Python 3.3.1, но код из книги, я думаю, для Python 2.X.

from livewires import games, color

class Pizza(games.Sprite):
    """A falling pizza"""
    def __init__(self, screen, x,y, image, dx, dy):
        """Initialise pizza object"""
        self.init_sprite(screen = screen, x = x, y = y, image = image, dx = dx, dy = dy)

SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480

#main

my_screen = games.Screen(SCREEN_WIDTH, SCREEN_HEIGHT)

wall_image = games.load_image("wall.jpg", transparent = False)
pizza_image = games.load_image("pizza.jpg")
my_screen.set_background(wall_image)
games.Text(screen = my_screen, x = 500, y = 30, text = "Score: 1756521", size = 50, color = 

my_screen.mainloop()

Однако, когда я запускаю эту программу, я получаю сообщение об ошибке (см. Ниже)

  games.Text(screen = my_screen, x = 500, y = 30, text = "Score: 1756521", size = 50, color = color.black)
TypeError: __init__() got an unexpected keyword argument 'text'

Я надеюсь, что вы можете помочь

1 ответ

Я ответил с комментарием, но думал, что уточню с полным ответом.

Я только что посмотрел исходный код для модуля livewires games.py, как я предложил

class Text(Object, ColourMixin):
    """
    A class for representing text on the screen.

    The reference point of a Text object is the centre of its bounding box.
    """

    def __init__(self, screen, x, y, text, size, colour, static=0):
        self.init_text (screen, x, y, text, size, colour, static)
        .........

Итак, как вы можете видеть, __init__() для класса Text не ожидается аргумент ключевого слова с именем text. Вместо этого он ожидает ряд позиционных аргументов.

Так что ваш код должен выглядеть так

games.Text(my_screen, 500, 30, "Score: 1756521", 50, color.black)

Редактировать:

Как отмечает 2rs2ts, вы можете указывать аргументы ключевых слов для позиционных аргументов, если вы указываете все имена аргументов. Однако, поскольку вы использовали ключевое слово color, а не color, ваш код не удался. Поэтому следующее также должно работать (но я бы порекомендовал использовать позиционные аргументы)

games.Text(screen=my_screen, x=500, y=30, text="Score: 1756521", size=50, colour=color.black)

В соответствии с PEP8 вы также должны заметить: "Не используйте пробелы вокруг знака =, когда они используются для обозначения ключевого аргумента или значения параметра по умолчанию".

Другие вопросы по тегам