首页 > 解决方案 > 为什么 Python 会在类属性定义中为条件列表推导引发 NameError?

问题描述

这有效:

class Foo:
    ATTR_1 = [1, 2]
    ATTR_2 = [i for i in ATTR_1]

    def __init__(self):
        print(Foo.ATTR_1, Foo.ATTR_2)
Foo()

它打印[1, 2] [1, 2]。然而,在第三行的列表推导中添加一个条件会导致 Python 抛出一个NameError:

class Foo:
    ATTR_1 = [1, 2]
    ATTR_2 = [i for i in ATTR_1 if len(ATTR_1) > 0]

    def __init__(self):
        print(Foo.ATTR_1, Foo.ATTR_2)
Foo()

追溯:

Traceback (most recent call last):
  File "/path/to/tmp.py", line 1, in <module>
    class Foo:
  File "/path/to/tmp.py", line 3, in Foo
    ATTR_2 = [i for i in ATTR_1 if len(ATTR_1) > 0]
  File "/path/to/tmp.py", line 3, in <listcomp>
    ATTR_2 = [i for i in ATTR_1 if len(ATTR_1) > 0]
NameError: name 'ATTR_1' is not defined

为什么会这样,我该如何解决?我正在使用 Python 3.6.4。

标签: pythonpython-3.xpython-3.6

解决方案


推荐阅读