a = 10
b = None
class Hoge(object):
def __init__(self):
self.x = []
for c in xrange(a):
self.x.append(c)
if b is None:
b = self.x
def fuga(self):
print self.x
>>> h = Hoge()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 6, in __init__
UnboundLocalError: local variable 'b' referenced before assignment
この場合
if b is None:
の直前の行に追加で
global b
を書くと期待通りに動くのですが
なぜ
for c in xrange(a):
のところの a の方の参照ではエラーが出ないんでしょう?
__init__関数をコンパイルする時、
b = self.x とあるから
bはローカル変数と見なされたから。
代入操作は必ずローカルになる。
エラってるのは if b is None: のところだろ
コンパイル時に代入されてるからローカル変数になって
実行時に参照しようとしてローカル変数が無いってことだろ