Python 类:NameError:名称“foo”未定义

问题描述 投票:0回答:1

为什么在构建仅具有非零长度的元组时访问类属性

foo
会失败?

class Foo:
    foo = 42
    
    bar_ok1 = (foo for _ in range(10))
    bar_ok2 = tuple(foo for _ in [])
    
    bar_fail1 = tuple(foo for _ in range(10))
    bar_fail2 = tuple(foo for _ in [0, 1, 2])
Traceback (most recent call last):
  File "main.py", line 1, in <module>
    class Foo:
  File "main.py", line 7, in Foo
    bar_fail1 = tuple(foo for _ in range(10))
  File "main.py", line 7, in <genexpr>
    bar_fail1 = tuple(foo for _ in range(10))
NameError: name 'foo' is not defined
python class static iterator nameerror
1个回答
0
投票

那是因为 `bar_ok1 尚未评估,因为它定义了一个生成器,并且在类定义中未访问 foo 值。 bar_ok2 也是如此,因为它根本不执行迭代(空列表)。

相比之下,bar_fail* 属性是根据类定义进行评估的。

运行以下命令,您会发现 bar_ok1 失败:

class Foo:
    foo = 42
    
    bar_ok1 = (foo for _ in range(10))
    bar_ok2 = tuple(foo for _ in [])
    
    #bar_fail1 = tuple(foo for _ in range(10))
    #bar_fail2 = tuple(foo for _ in [0, 1, 2])

list(Foo.bar_ok1)
© www.soinside.com 2019 - 2024. All rights reserved.