为什么这种方式不能使用 class 属性?

2024-09-26 18:08:31 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么不能以这种方式使用类attr

class A:
    a = 1
    d = [1, 2, 3, 4]
    e = [i for i in d if i == a]
    print(e)

错误信息如下:

Traceback (most recent call last):
  File "/home/gavinc/code/eigen_clients/gavinc/a002.py", line 3, in <module>
    class A:
  File "/home/gavinc/code/eigen_clients/gavinc/a002.py", line 7, in A
    e = [i for i in d if i == a]
  File "/home/gavinc/code/eigen_clients/gavinc/a002.py", line 7, in <listcomp>
    e = [i for i in d if i == a]
NameError: name 'a' is not defined

如果我在类的外部编写此代码,则不会出现错误,类似于以下代码:

a1 = 1
d1 = [1, 2, 3, 4]
e1 = [i for i in d1 if i == a1]
print(e1)

Tags: 代码inpyhomeforiflinecode
1条回答
网友
1楼 · 发布于 2024-09-26 18:08:31

对于类,实例变量在init方法中定义如下:

class A:
    def __init__(self):
        self.a = 1
        self.d = [1, 2, 3, 4]
        self.e = [i for i in self.d if i == self.a]
        print(self.e)

# Creating an object of the class in order to trigger __init__
A()

如果您直接在类中定义变量,它们将是类变量。它们既可以通过类实例(通常与实例变量类似)访问,也可以直接从类名访问(在本例中,类似于A.a

根据我的测试,您的代码可能会失败,因为列表理解的范围不包含a。我不确定这是否是因为类A仍在构造中,因此缺少要传递的适当范围。我这么说是因为用for循环代替理解会产生预期的结果:

class A:
    a = 1
    d = [1, 2, 3, 4]
    e = []
    for i in d:
        if i == a:
            e.append(i)
    print(e)
    # [1]

相关问题 更多 >

    热门问题