使用self.size = size时出现无效语法
我刚刚接触Python和编程,还是个新手。我有一个应该很简单的问题。我正在使用一本关于Python的初学者书籍,书中用的是Python 3.1版本。
我现在在写书里的一个程序,正在学习在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标记为无效语法,但其他地方没有问题……还有最后一点,当我把这个代码块放到命令行中运行时,它也给我一个语法错误,但不是同样的错误,它在这个块的第一行冒号后面给我一个错误,并把整个空白区域标红……我搞不清楚为什么。我把它放在命令行中是想让它帮我高亮显示self的问题,但结果却显示了完全不同的错误。
任何帮助都会非常感谢!谢谢!
1 个回答
你忘记关闭括号了。
通常,当你忘记关闭某个括号时,程序会把错误指向下一行:
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__
的参数(x
和y
)是传给父类的__init__
方法的,而其他参数则是在别处读取的(image
)或者是动态创建的(dx
和dy
)。最后,有一个参数(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
参数。