Python 类方法赢得';不要从另一个模块互相呼叫
我已经开始学习python,目前正在制作一个简单的数独游戏 我有两个模块sudoku.py和sudoku_GUI.py py包含一个类板,其目的是根据输入解决游戏 solve方法为了生成解决方案,需要调用其他方法:Python 类方法赢得';不要从另一个模块互相呼叫,python,class,methods,module,Python,Class,Methods,Module,我已经开始学习python,目前正在制作一个简单的数独游戏 我有两个模块sudoku.py和sudoku_GUI.py py包含一个类板,其目的是根据输入解决游戏 solve方法为了生成解决方案,需要调用其他方法: def solve(self): empty_fields = self.find_empty() if empty_fields == []: return True self.init_rows_columns_squares()
def solve(self):
empty_fields = self.find_empty()
if empty_fields == []:
return True
self.init_rows_columns_squares()
row, column = empty_fields[0]
square = 3 * (row//3) + column//3
valid_numbers = list(set(Board.number_arr) - (set(self.rows[row] + self.columns[column] + self.squares[square])))
valid_numbers.sort()
for i in valid_numbers:
if not self.is_valid(empty_fields[0], i):
return False
self.insert_number(empty_fields[0], i)
if self.solve():
return True
self.insert_number(empty_fields[0], 0)
return False
当从它自己的模块调用它时,它工作得很好。
但是,当我尝试从数独GUI调用它时:
import sudoku
def solve_board(self, board):
board.solve()
board_1 = sudoku.Board(sudoku.board)
solve_board(self, board_1)
它不工作,solve方法被调用,它不会像在自己的模块中那样调用其他方法。
显然,我可以在第一个模块中解决它,然后导入已解决的电路板,但因为我正在学习,所以我想知道为什么会发生这种情况
如果有人能给我解释一下,我会非常感激的。谢谢大家! 从您编写的代码中,我了解到您以错误的方式调用函数!在类中编写代码时,只能使用
self
关键字。在类之外,调用类方法时不需要编写self
我将重写您的代码以便工作:
>>> import sudoku
>>> from pprint import pprint
>>>
>>> class test_gui:
... def solve_board(self, board):
... board.solve()
...
>>> board_1 = sudoku.Board(sudoku.board)
>>> gui = test_gui()
>>> gui.solve_board(board_1)
>>> pprint(board_1.board)
[[1, 4, 6, 7, 9, 2, 3, 8, 5],
[2, 5, 8, 3, 4, 6, 7, 9, 1],
[3, 7, 9, 5, 8, 1, 4, 6, 2],
[4, 3, 7, 9, 1, 5, 8, 2, 6],
[5, 8, 1, 6, 2, 7, 9, 3, 4],
[6, 9, 2, 4, 3, 8, 1, 5, 7],
[7, 1, 3, 2, 6, 9, 5, 4, 8],
[8, 2, 4, 1, 5, 3, 6, 7, 9],
[9, 6, 5, 8, 7, 4, 2, 1, 3]]
你看到的错误是什么?没有错误,它运行,只是不调用self。init_rows\u columns\u squares()和其他我通过在每个方法中放置print(“方法名称”)来测试它,它只打印“solve”,将整个代码粘贴到并发送短链接到此处OK,可以,只要一秒钟,如果所有东西都在一个文件中,它能正常工作吗?@Mohsen_Fatemi很好地发现了这一点,但我不认为这是问题所在,因为如果我是对的,这个调用会引发某种异常?我现在已经扫描了我的代码,它是一个打字错误。我现在就纠正这个问题。很抱歉,谢谢你花时间来关注我的问题。顺便说一句,它不会引发异常。如果你认为这是一个真实的答案,请将其标记为答案。谢谢。现在,你帮我找到了解决办法。刚刚发现,我在IF中查找0,这在控制台版本中有意义,但在GUI中我需要空白。再次感谢!