class f:
x = 5
def __init__(self, bar = f.x):
self.bar = bar
def fn(r, test = print(f.x)):
return r
我在python解释器(IDLE)中运行了上面的代码,它工作得很好。然后,我将代码粘贴到atom并以交互方式运行该代码,并返回以下错误:
Traceback (most recent call last):
File "testing.py", line 28, in <module>
class f:
File "testing.py", line 30, in f
def __init__(self, bar = f.x):
NameError: name 'f' is not defined
为什么会有所不同?为什么没有定义“ f”?我认为当python命中class语句时,将创建一个class对象,然后继续在class body中创建function对象。
功能参数的默认值是在定义功能时计算的。但是,直到类定义完成后,您才能引用类。
当您在IDLE中执行此操作时,我怀疑您先前有的定义,f
并且正在重新定义它。在完成新定义之前,旧定义仍然有效,因此f.x
引用的旧值f.x
。
当您将其放在脚本中时,它重新开始,因此以前没有的定义f
,并且f.x
在函数定义期间尝试求值时出错。
作为一个简单的例子,考虑如下语句
x = x + 1
如果将其单独放在脚本中,则会出现错误。但是,如果您在IDLE中使用它,并且您之前已经做过
x = 3
在同一个IDLE会话中,它将起作用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句