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

标签 python

super ,对 Python 和一般编程 super 新手。我有一个问题应该很简单。我正在使用一本使用 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 为无效语法,但没有别的……还有最后一点,当我把这个特定的 block 放入 shell 并尝试在那里运行它时,它也会给我一个语法错误,但不是同一个,它在这个 block 的第一行的冒号之后给我一个,并用红色突出显示整个空白区域.....我不明白为什么。我把它放在 shell 中,这样它就可以突出 self 的东西并帮助我,而是向我展示一些完全不同的东西。

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

最佳答案

你忘了关闭括号。

通常,当您忘记关闭一些括号时,解释器会将错误指出在以下行中:

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 参数创作。

关于python - 使用 self.size = size 时语法无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15088047/

相关文章:

python - django模板中的转义问题

python - python中的嵌套变量

python - tkk : custom style doesn't work

python - 数字总和,属性,请提示

Python父类访问子类的类变量

Python itertools.groupby 与具有多个值的字典

python - 将 Django 模板设置从 1.7 更新到 1.8

字典的 Python "extend"

python - Python 的新增内容 : GLPK not building properly/Python ImportError

python - 获取调整大小后的显示尺寸