2017-08-14 64 views
0

我的程序的代碼是在這裏:Why am I getting this error "NameError:name 'self' is not defined."`AttributeError`試圖在同一個類中訪問2D列表(蟒蛇)

我得到的錯誤是:

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函數中聲明一個列表。

+0

您還需要在'__init__'中將其稱爲'self.puzzle'。這不是魔術。 –

回答

0

爲什麼你沒有初始化puzzle作爲一個實例變量?事實上,它只是一個局部變量。你需要:

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

self是您的實例,並self.x = ...將導致x,實例變量,併爲self屬性訪問。

+0

因爲我沒有意識到這就是你現在要寫的東西,我想我終於完全明白了。 「self」在某種程度上是關鍵字「this」的python等價物。我希望我看到關於類變量問題的其他答案解釋了這一點。準確地說, – codehelp4

+0

@ codehelp4。它不是「像」「這個」,它是「這個」。乾杯。 –

+0

說了這樣的話,我還是很驚訝,你必須寫下它,因爲它是第一次被宣佈。不用多說再次感謝。 – codehelp4