【问题标题】:`AttributeError` while trying to access 2d list within the same class (python) [duplicate]尝试访问同一类中的二维列表时出现`AttributeError`(python)[重复]
【发布时间】:2017-08-14 03:23:28
【问题描述】:

我的程序代码在这里:Why am I getting this error "NameError:name 'self' is not defined."

我得到的错误如下:

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'

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

【问题讨论】:

  • 您还需要在__init__ 中调用它self.puzzle。这不是魔术。

标签: python


【解决方案1】:

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

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

self 是您的实例,self.x = ... 将产生 x,一个实例变量,可作为 self 的属性访问。

【讨论】:

  • 因为我没有意识到你现在必须这样写,我想我终于完全明白了。 “self”在某种程度上是关键字“this”的python等价物。我希望我看到的关于涉及类变量的问题的其他答案能够解释这一点。
  • @codehelp4 没错。它不是“喜欢”this,它 this。干杯。
  • 话虽如此,我仍然感到惊讶,因为这是第一次被宣布,所以你必须写它。不用再说谢谢了。
  • @codehelp4 您不希望声明一个局部变量并违背您的意愿将其分配为属性变量,对吧?请记住,显式总是比隐式好(Python 之禅)。
猜你喜欢
  • 1970-01-01
  • 2021-08-10
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多