Вопрос:

Ошибка типа: __init __ () получила неожиданный размер аргумента ключевого слова

python

2852 просмотра

2 ответа

3 Репутация автора

Как я могу исправить этот неожиданный аргумент ключевого слова "размер"?


   Traceback (most recent call last):
      File "H:\Documents\Astro game\astro games6.py", line 73, in <module>
        main()
      File "H:\Documents\Astro game\astro games6.py", line 61, in main
        new_asteroid = Asteroid(x = x, y = y,size = size)
    TypeError: __init__() got an unexpected keyword argument 'size'

Полный код:

import random
from superwires import games

games.init(screen_width = 640, screen_height = 480, fps = 50)

class Asteroid(games.Sprite):
    """ An asteroid wich floats across the screen"""
    SMALL = 1
    MEDIUM = 2
    LARGE = 3
    images = {SMALL : games.load_image("asteroid_small.bmp"),
              MEDIUM : games.load_image("asteroid_med.bmp"),
              LARGE : games.load_image("asteroid_big.bmp")}
    speed = 2

    def _init_(self, x, y, size):
        """Initialize asteroid sprite"""
        super(Asteroid, self)._init_(
            image = Asteroid.images[size],
            x = x, y = y,
            dx = random.choice([1, -1]) *Asteroid.SPEED* random.random()/size,
            dy = random.choice([1, -1]) *Asteroid.SPEED* random.random()/size)

        self.size = size


    def update (self):
        """ Warp around screen"""
        if self.top>games.screen.height:
            self.bottom = 0

        if self.bottom < 0:
            self.top=games.screen.height

        if self.left > games.screen.width:
            self.right = 0

        if self.left < 0:
            self.left = games.screen.width

class Ship(games.Sprite):
    """The player's ship"""
    image = games.load_image("ship.bmp")
    ROTATION_STEP = 3

    def update(self):
        if games.keyboard.is_pressed(games.K_LEFT):
            self.angle -= Ship.ROTATION_STEP
        if games.keyboard.is_pressed(games.K_RIGHT):
            self.angle += Ship.ROTATION_STEP


def main():
    nebula_image = games.load_image("nebula.jpg")
    games.screen.background = nebula_image

    for i in range(8):
        x = random.randrange(games.screen.width)
        y = random.randrange(games.screen.height)
        size = random.choice([Asteroid.SMALL, Asteroid.MEDIUM, Asteroid.LARGE])
        new_asteroid = Asteroid(x = x, y = y,size = size)
        games.screen.add(new_asteroid)


    the_ship = Ship(image = Ship.image,
                    x = games.screen.width/2,
                    y = games.screen.height/2)

    games.screen.add(the_ship)

    games.screen.mainloop()

main()

Я попытался удалить аргумент размера, но это вызвало больше ошибок в коде. Мы также попытались изменить тег размера на что-то другое, чтобы посмотреть, поможет ли это, и это тоже не сработало. Так что я делаю то, что мне нужно сделать, чтобы этот код работал. Я работаю над этим для классного проекта в школе. Английский не мой родной язык, поэтому я попросил одноклассника написать это.

Спасибо.

Автор: Hinnerk Stolz Источник Размещён: 22.08.2016 09:49

Ответы (2)


-2 плюса

13491 Репутация автора

Удалите sizeаргумент в вашем коде.

примечание: имя модуля Python не должно содержать пробелов: вы не сможете импортировать его в другой модуль.

Автор: Laurent LAPORTE Размещён: 22.08.2016 09:56

0 плюса

489854 Репутация автора

Решение

Ваш класс астероидов определяет _init_вместо __init__. Вам нужно два подчеркивания с каждой стороны для магических методов Python.

Автор: Daniel Roseman Размещён: 22.08.2016 10:21
Вопросы из категории :
32x32