code
是一个类变量,因此在访问它时需要调用 - Test.code
,因此无法使用code
访问它们。
此外,即使您使用Test.code
访问它们,它仍然不起作用,因为在定义类时会计算类变量的值(默认值),所以当您尝试访问Test.code
时,由于尚未创建,因此无法访问Test
。的那个例子 -
>>> class Test:
... code = [ 1, 2, 3, 5, 6, 7, 8, 9, 10]
... code2d = [ [ Test.code[j*3 + i] for i in range(3) ] for j in range(3) ]
... def __init__(self):
... pass
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in Test
File "<stdin>", line 3, in <listcomp>
File "<stdin>", line 3, in <listcomp>
NameError: name 'Test' is not defined
,当你把它们放在__init__()
你是把他们作为我猜 -
类测试:
def __init__(self):
code = [ 1, 2, 3, 5, 6, 7, 8, 9, 10]
code2d = [ [ code[j*3 + i] for i in range(3) ] for j in range(3) ]
这工作,因为code
这里是一个local variable
,因此可以接受__init__()
方法中的其他局部变量,尽管它们在该函数之外不可访问。
也许,你并不需要他们为类变量,如果你想拥有的类的所有实例(类的对象)code
和code2d
,您应该创建实例变量原样
>>> class Test:
... def __init__(self):
... self.code = [ 1, 2, 3, 5, 6, 7, 8, 9, 10]
... self.code2d = [ [ self.code[j*3 + i] for i in range(3) ] for j in range(3) ]
如果你真的想code
和code2d
是类变量,做一个方式,它是定义code2d
类012外,example -
class Test:
code = [ 1, 2, 3, 5, 6, 7, 8, 9, 10]
def __init__(self):
pass
Test.code2d = [ [ Test.code[j*3 + i] for i in range(3) ] for j in range(3) ]
发布完整的代码。 –
你真的想要代码和code2d是类变量吗? –
是的,我需要code2d。然而,这是示例代码,真正的代码更复杂,我需要利用嵌套的列表理解。 – hakubaa