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