使用self.size = size时语法无效

时间:2013-02-26 11:32:40

标签: python

超级,非常擅长Python和编程。我有一个问题应该很简单。我正在使用Python 3.1版的python初学者编程书。

我目前正在写出书中的一个程序,我正在学习使用python时缩进的重要性,所以我正在修复我发现的那些错误,然后我到达self.size = size的所在位置突出显示代码块中的self 无效语法但是我正在手动输入这个单词,所以我不确定我做错了什么。这是代码块:

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 

问题在于最后一行,它将self强调为无效语法,但没有其他内容...还有最后一个注释,当我将此特定块放入shell并尝试在那里运行时它也会给我一个语法错误但不是同一个,它给我一个在这个块的第一行冒号后,并突出显示整个空白区域红色.....我无法理解为什么。我把它放在外壳中,所以它可以突出自我并帮助我,但相反向我展示了一些完全不同的东西。

任何帮助将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:4)

你忘了关闭括号。

通常,当您忘记关闭某些括号时,解释会将错误指向以下行:

def _init_(self, x, y, size):
    """ Initialize asteroid sprite. """
    super(Asteroid, self)._init_(    <-- here you have a parentheses opening
        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  <-- no more commas here

    self.size = size  <-- first line without a trailing comma OR parentheses: SYNTAX ERROR HERE! (even though the assignment itself is ok)

这本书实际上意味着什么 - 就像Martijn Pieters指出的那样,一些self.__init__参数(xy)被传递给父亲的{{1} }方法,其他参数正在其他地方(__init__)读取或在运行中创建(imagedx)。最后,其中一个参数(dy)仅传递给size正文中的实例,并分配给self.__init__

self.size

重要的是要知道Python中的任何方法(在类中定义的例程)都会自动接收第一个参数,即对象实例本身。虽然你可以称之为你想要的,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 是通用的Python惯例。因此,当您定义self并将__init__作为第一个参数传递时,您可以在整个此函数中使用它来引用您正在创建的对象。因此,说self表示您希望对象具有self.x = x属性,其值是您在创建对象时传递的x参数。