`AttributeError`试图访问同一类(python)中的2d列表时

`AttributeError`试图访问同一类(python)中的2d列表时,python,Python,我的程序代码如下: 我得到的错误如下: Traceback (most recent call last): File "sudoku_maker.py", line 51, in <module> p.main() File "sudoku_maker.py", line 44, in main self.createEasy() File "sudoku_maker.py", line 16, in createEasy if (self.pu

我的程序代码如下:

我得到的错误如下:

Traceback (most recent call last):
  File "sudoku_maker.py", line 51, in <module>
    p.main()
  File "sudoku_maker.py", line 44, in main
    self.createEasy()
  File "sudoku_maker.py", line 16, in createEasy
    if (self.puzzle[i][j] != 0):
AttributeError: 'Puzzle' object has no attribute 'puzzle'
回溯(最近一次呼叫最后一次):
文件“sudoku_maker.py”,第51行,在
p、 main()
文件“sudoku_maker.py”,第44行,主目录
self.createEasy()
createEasy中第16行的文件“sudoku_maker.py”
如果(self.puzzle[i][j]!=0):
AttributeError:“Puzzle”对象没有属性“Puzzle”

我能理解为什么会发生这个错误的唯一原因是因为列表只在init函数中声明,但我把它放在那里,因为我在这里看到了另一个答案,它说这样做。我本想对回答进行评论,问如何对类变量执行此操作,但我没有足够的代表性,然后我发现另一个问题,回答者说只在init函数中声明一个列表。

为什么你没有初始化
puzzle
作为实例变量?实际上,它只是一个局部变量。您需要:

def __init__(self, **puzzle): 
    self.puzzle = [[0 for x in range(9)]for y in range(9)]

self
是您的实例,
self.x=…
将产生
x
,这是一个实例变量,可以作为
self

的属性访问。您还需要在
\uuu init\uuu
中调用它
self.puzzle
。这不是魔术,因为我不知道你现在必须这样写,我想我终于完全明白了。“self”在某种程度上相当于关键字“this”。我希望我看到的关于涉及类变量的问题的其他答案能够解释清楚。@codehelp4。它不是“像”
这个
,而是
这个
。干杯。尽管如此,我仍然感到惊讶,因为这是第一次申报,所以你不得不写下它。无需再次表示感谢。@codehelp4您不想违背自己的意愿声明局部变量并将其指定为属性变量,对吗?记住,显式总是比隐式好(Python的Zen)。