Python 类方法赢得';不要从另一个模块互相呼叫

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()

我已经开始学习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()
    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中我需要空白。再次感谢!