Таинственная ошибка «дополнительный аргумент» при запуске метода экземпляра из инициализатора - PullRequest
1 голос
/ 04 июля 2019

Я пытаюсь сделать игру жизни Конвея на питоне. По сути, мне нужно составить список grid / 2d и заполнить его значениями. Я зарегистрировал сетку как объект Grid. Указатель на объект является атрибутом объекта Game.

По какой-то причине, когда я пытаюсь запустить метод экземпляра в Grid, python говорит, что «setCell ожидал 3 позиционных аргумента и получил 4». Но я дал только 3. См. Код ниже:

Я подумал, что это может быть проблема с переменной "self", но использование вещи-оболочки "tempgrid" для хранения сетки, похоже, не работает. (Пунктирные линии представляют отдельные файлы)

class Cell:
    def __init__(self, xpos, ypos, status):
        self.xpos = xpos
        self.ypos = ypos
        self.status = status
----------------
from .cell import Cell

class Grid:
    def __init__(self, size):
        self.size = size
        self.cells = [[None for _ in range(size)] for _ in range(size)]

    def setCell(xpos, ypos, status):
        cells[xpos][ypos] = Cell(xpos, ypos, status)
------------------------
from .grid import Grid

class Game:
    def __init__(self, size):
        self.grid = Grid(size)

        for i in range(size):
            for j in range(size):
                self.grid.setCell(i, j, 0) #python says this is supposed to have 3 arguments but has 4, even though I give 3

Что происходит? Для справки, точное сообщение об ошибке: «TypeError: setCell () принимает 3 позиционных аргумента, но 4 было дано»

1 Ответ

0 голосов
/ 04 июля 2019

Вы забыли self в

def setCell(self, xpos, ypos, status):

Когда вы запускаете

self.grid.setCell(i, j, 0)

, тогда Python запускает

Grid.setCell(self.grid, i, j, 0)

, поэтому ему нужно 4 аргумента в определении

(и затем он может назначить self.grid на self)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...