Методы класса не будут вызывать друг друга из другого модуля - PullRequest
0 голосов
/ 30 января 2020

Я начал изучать python и сейчас работаю над созданием простой игры Судоку.

У меня есть 2 модуля sudoku.py и sudoku_ GUI .py

sudoku.py содержит один класс - Board, и его целью является решение игры на основе ввода.

Метод решения, для генерации решения необходимо вызвать другие методы:

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

И это работает просто отлично, когда вызывается из собственного модуля. Однако, когда я пытаюсь вызвать его из Sudoku_ GUI:

import sudoku

def solve_board(self, board):
        board.solve()

board_1 = sudoku.Board(sudoku.board)
solve_board(self, board_1)

Он не работает, вызывается метод execute, и он не будет вызывать другие методы, как в своем собственном модуле. Очевидно, я мог бы решить это в первом модуле и просто импортировать решенную плату, но так как я учусь, я хочу знать, почему это происходит.

Если бы кто-то мог объяснить мне это, я был бы очень благодарен. Спасибо!

1 Ответ

1 голос
/ 30 января 2020

Из кода, который вы написали, я понимаю, что вы вызываете свои функции неправильно! Вы используете ключевое слово 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]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...