1

超级,超级新的 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 并尝试在那里运行它时,它也会给我一个语法错误,但不是同一个,它在这个块的第一行的冒号后面给了我一个,并用红色突出显示整个空白区域......我不知道为什么。我把它放在壳里,这样它就可以突出自我的东西并帮助我,而是向我展示了一些完全不同的东西。

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

4

1 回答 1

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) 被传递给父__init__方法,其他参数正在其他地方读取 ( image) 或即时创建 (dxdy) . 最后,参数之一 ( size) 仅传递给实例,在 的主体中self.__init__,分配给self.size

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是通用的 Python 约定。因此,当您定义__init__并作为第一个参数传递时self,您可以在整个函数中使用它来引用您正在创建的对象。因此,说self.x = x意味着您希望对象具有x属性,其值是x您在创建对象时传递的参数。

于 2013-02-26T11:36:16.620 回答