Python:在赋值后引用时抛出神秘的"赋值前引用"错误

use*_*404 0 python

file1.py:

a = 2;

class adder():

    def __init__(self):
        a = a;
        a = a % 5;
        print a;
Run Code Online (Sandbox Code Playgroud)

adder()在" UnboundLocalError: local variable 'a' referenced before assignment,"中实例化结果,但如果我将init更改为:

def __init__(self):

     print a;
Run Code Online (Sandbox Code Playgroud)

然后我没有错误.

Eev*_*vee 5

如果a = ...(或任何其他形式的赋值for a in ...)出现在函数体中的任何位置,则a变为整个函数的局部.你不能将变量部分地全局化,部分局部化.

所以你有一个本地命名a,你正在尝试分配a = a.Python需要做的第一件事是a在右侧找出它的值......但是a还没有分配给它的本地.因此错误.

只需使用不同的变量名称.如果你真的想要改变外部a(在构造函数中有腥味!),你必须声明你的意图global a.

此外,在Python的行末尾不需要分号.如果这是Python 2,那么你的类应继承自object(如class Adder(object):),否则你会得到一个"旧式"类,它具有不同的行为,并且在以后的Python版本中不存在.