2013-02-26 2 views
0

супер, супер новый для Python и программирования в целом. У меня есть вопрос, который должен быть достаточно простым. Я использую книгу программирования начинающих питонов, используя Python версии 3.1.Недопустимый синтаксис при использовании 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

+2

Конечно, вам не хватает круглого кронштейна, конец строки «dy =» – Vorsprung

ответ

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) 

Возможно, что книга на самом деле имел в виду это, - как Мартейн Питерс отметил, некоторые из эти параметры 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, который вы передали при создании объекта.

+1

Кроме того, я настоятельно рекомендую вам прочитать «Learning Python» от O'Reilly, он имеет легкий язык (с множеством глупых шуток и ссылок) , чтобы вы действительно понимали «что происходит» с тем, как работает Python. Это очень помогло мне, будучи самым доступным и полным учебным ресурсом Python, который я имел возможность читать. – heltonbiker

+0

Спасибо, ребята, за вашу помощь. Я думаю, что с информацией, которую вы мне предоставили, я могу устранить ее сейчас! Его раздражает то, как в программировании всегда есть мелочи, которые вам не хватает: P. – Orex

Смежные вопросы