2013-02-26 54 views
0

超級,超級新的Python和一般的編程。我有一個問題應該很簡單。我正在使用Python版本3.1的Python初學者編程書籍。使用self.size = size時的語法無效

我目前正在寫出書中的程序之一,我正在學習使用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 

的問題是,最後一行,它強調自我爲無效的語法,但沒有別的......還有最後一個音符,當我把這個特定塊到外殼,並嘗試在那裏運行它也給我一個語法錯誤,但不是同一個,它給了我一個這個塊的第一行冒號之後,並突出顯示整個空白區域與紅色.....我無法數字爲什麼。我把它放在外殼裏,這樣可以突出自我並幫助我,但是卻讓我看到了完全不同的東西。

任何幫助將不勝感激!謝謝!

+5

它應該是'def __init__',帶有雙下劃線,而不是'_init_'。 – heltonbiker 2013-02-26 11:35:42

+2

當然你錯過了一個圓括號,「dy =」行的結尾 – Vorsprung 2013-02-26 11:36:40

回答

3

你忘了關閉括號。

通常,當您忘記關閉一些括號,該解釋的點誤差在下面一行是:

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皮特斯指出,一些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(A類中定義的例程)的任何方法是非常重要的自動接收第一個參數,它是對象實例本身。雖然你可能稱它爲你想要的,但self是這個通用的Python約定。因此,當您定義__init__並通過self作爲第一個參數時,您可以在整個此函數中使用它來引用您正在創建的對象。因此,說self.x = x意味着您希望該對象具有x屬性,其值是您在創建對象時傳遞的參數x

+1

另外,我強烈建議你閱讀O'Reilly的「學習Python」,它有一個輕的語言(有很多愚蠢的笑話和引用) ,讓你真正瞭解Python的工作方式「發生了什麼」。它爲我提供了很多幫助,是迄今爲止我有機會閱讀的最容易訪問和完整的Python學習資源。 – heltonbiker 2013-02-26 11:51:18

+0

謝謝你們的幫助。我認爲你們提供給我的信息我現在可以解決它!它煩人的編程它總是你想念的小事情:P。 – Orex 2013-02-26 13:03:21