1

超、Python とプログラミング全般に超初心者。十分に単純な質問があります。私は、Python バージョン 3.1 を使用した Python 初心者向けプログラミング ブックを使用しています。

私は現在、本のプログラムの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 を無効な構文として強調表示しますが、それ以外は何も強調表示しないことです...また、最後の注意として、この特定のブロックをシェルに入れてそこで実行しようとすると、構文エラーが発生しますが、同じエラーは発生しません、このブロックの最初の行のコロンの直後に1つ表示され、その空白領域全体が赤で強調表示されます...そして、理由がわかりません。私はそれをシェルに入れていたので、自己のことを強調して助けてくれましたが、代わりにまったく別のものを示しています。

どんな助けでも大歓迎です!ありがとう!

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__パラメーター ( xand y) は親のメソッドに渡され、__init__他のパラメーターは別の場所で読み取られる ( image) か、オンザフライで作成される ( dxand dy) . 最後に、パラメータの 1 つ ( 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 に答える