Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python UnboundLocalError:局部变量';播放器';分配前参考_Python_Variables_Instance - Fatal编程技术网

Python UnboundLocalError:局部变量';播放器';分配前参考

Python UnboundLocalError:局部变量';播放器';分配前参考,python,variables,instance,Python,Variables,Instance,当我发现这个错误时,我正试图编写一些代码。我首先用nameaparam1和param2定义player类。 当我运行game函数并尝试创建player 类内部,我得到UnboundLocalError错误。这是我的密码: class player(object): def __init__ (self, name, param1 = None, param2 = None): self.param1 = param1 self.param2 = par

当我发现这个错误时,我正试图编写一些代码。我首先用
name
a
param1
param2
定义
player
类。 当我运行
game
函数并尝试创建
player
类内部,我得到
UnboundLocalError
错误。这是我的密码:

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())))
所以基本上,我的问题是python不允许我在函数中创建类的实例。我找了很多,但我没有找到我要找的东西。
提前谢谢

您在
中为playerList中的player使用变量名
player
,但您的类也被命名为
player
。由于为该名称(在for循环中)赋值,Python将其视为局部变量,因此无法访问该名称的全局类

最好的解决方案是将类名更改为
Player
,并加上大写字母p。Python中的惯例是类以大写字母开头


(前一行出现错误的原因是Python在解析函数时决定哪些变量是本地变量。因为您使用
player
作为for循环的目标,所以它被标记为本地变量,但在您首次访问它时,在尝试访问类时,没有为该本地变量赋值。)

错误在这一行
playerList.append(player(原始输入('player%i:('x+1)))
@sukritkalla局部变量是在解析函数定义时决定的,因此对于
player
函数,它将不会访问全局范围,它认为
player
是一个局部变量。哦,是的。忘了吧。对不起。:)哇!我知道这是件愚蠢的事。。。谢谢你的快速回答!默认变量是在解析过程中计算的,因此在函数参数中添加
raw\u input
不是一个好主意,因为即使您从未运行过此函数,它也会被调用。