2013-07-07 2 views
1

Я пытался сделать код, когда обнаружил эту ошибку. Сначала я определяю класс player с name a param1 и param2. Когда я запускаю функцию game, и я пытаюсь создать экземпляр класса player внутри, я получаю ошибку UnboundLocalError. Вот мой код:UnboundLocalError: локальная переменная 'player', указанная перед назначением

class player(object): 

    def __init__ (self, name, param1 = None, param2 = None): 

     self.param1 = param1 
     self.param2 = param2 
     self.name = name 

def game(n = int(raw_input('How many players? '))): 

    playerList = [] 

    for x in range(n): 
     playerList.append(player(raw_input('Player %i: ' %(x+1)))) 

    for player in playerList: 
     player.param1 = int(raw_input('%s, how many do you predict? ' %(player.name.upper()))) 

Так в основном, моя проблема заключается в том, что питон не позволяет мне создать экземпляр класса внутри функции. Я много искал, но я не нашел того, что искал. Спасибо заранее!

+0

По умолчанию переменные вычисляются во время разбора, поэтому не рекомендуется добавлять аргументы внутри функции 'raw_input', поскольку это происходит для вызова, даже если вы не выполняете эту функцию никогда. –

ответ

4

Вы используете имя переменной player в for player in playerList, но ваш класс также имеет имя player. Поскольку вы назначаете значение этому имени (в цикле for), Python рассматривает его как локальную переменную, поэтому вы не можете получить доступ к глобальному классу этого имени.

Лучшим решением является изменение имени вашего класса до Player с капиталом P. Соглашение в Python предназначено для классов, начинающихся с буквы верхнего регистра.

(Причина, по которой ошибка возникает в предыдущей строке, заключается в том, что Python решает, какие переменные являются локальными при разборе функции. Поскольку вы использовали player в качестве цели цикла for, он помечен как локальный, но в то время, когда вы первый доступ к ней при попытке доступа к классу не присваивается этой локальной переменной.)

+0

Ошибка в этой строке 'playerList.append (player (raw_input ('Player% i:'% (x + 1))))' –

+1

Локальные переменные @SukritKalra определяются при анализе определения функции, поэтому для 'player 'функция не будет обращаться к глобальной области, она думает, что' player' является локальной переменной. –

+0

О да. Забыл об этом. Сожалею. :) –

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