【发布时间】:2015-09-17 19:31:09
【问题描述】:
这是我的代码的简化版本:
class foo:
def __init__(self, thing):
self.thing = thing
def bar():
foo = foo('test')
bar()
这是它产生的结果:
Traceback (most recent call last):
File "filepath", line 8, in <module>
bar()
File "filepath", line 6, in bar
foo = foo('test')
UnboundLocalError: local variable 'foo' referenced before assignment
关于这个我有一个两部分的问题。
首先,我该如何解决这个问题?经过一番谷歌搜索后,我发现在foo = foo('test') 行之前添加global foo 可以解决问题。但普遍的共识似乎是全局变量是要避免的坏事,那么有没有不使用全局变量的方法呢?
其次,为什么会发生这种情况?我了解函数只能访问在该函数内部创建的变量(当然还有全局变量)。但我不是试图访问在函数之外定义的变量,我只是在创建一个新变量。从逻辑上讲,为什么禁止在函数内部创建新对象(除非你先声明它是全局的)?
【问题讨论】:
-
发生这种情况是因为您认为自己很聪明,将局部变量与外部范围内的某物同名。
标签: python function oop object global-variables