Сапер: Python ошибка. AttributeError: тип объекта не имеет атрибута - PullRequest
0 голосов
/ 23 марта 2020

Я довольно новичок в кодировании и у меня проблемы с доступом к атрибутам объектов внутри другого объекта. Я попытался явно создать метод для возврата атрибута на неопределенный срок. Кажется, я не могу найти хорошее объяснение в Интернете.

Код, над которым я работаю, имеет конечную цель - имитировать игру тральщика. Чтобы сделать это, я создал класс с именем minefield.

class Minefield:
    def __init__(self, height, width, bombs):
        self.height = height
        self.width = width
        self.bombs = bombs
        self.flagged_amount = 0
        self.minefield = []
        self.setup_minefield()

    def setup_minefield(self):  # setup for the minefield
        for x in range(self.height):
            self.minefield.append([])
            for y in range(self.width):
                self.minefield[x].append(Cell) 

А также класс с именем Cell

class Cell:
   def __init__(self):  # setup for new cell
        self.revealed = False
        self.bomb = False
        self.flag = False
        self.nearby_bombs = 0

Теперь проблема, с которой я сталкиваюсь, заключается в том, что при попытке получить доступ Атрибут ячейки в минном поле я получаю сообщение об ошибке: AttributeError: тип объекта «Ячейка» не имеет атрибута «flag»

Код, который я пытаюсь запустить прямо сейчас (что приводит к ошибке) с использованием этих классов это довольно просто (см. ниже), но мне нужно будет использовать эти атрибуты для многих запланированных функций позже в программе.

my_minefield = Minefield(5, 5, 2)
    if my_minefield.minefield[1][1].flag:
        print ("yay")

Я не уверен, почему это не работает, и очень признателен за любую помощь в понимании вопрос. Спасибо!

1 Ответ

2 голосов
/ 23 марта 2020

Здесь:

self.minefield[x].append(Cell) 

Вы добавляете класс Cell, а не его экземпляр. Вы должны создать экземпляр класса, вызвав его:

self.minefield[x].append(Cell()) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...