Ошибка имени: имя ‘Player’ не определено

#python #class #nameerror

#python #класс #ошибка имени

Вопрос:

 class GameLogic(object):
    def __init__(self):
        self._player = Player(7)

class Player(object):
    def __init__(self,move_count):
        self.move_count = move_count
  

Это не мой исходный код. Я упростил свой исходный код, чтобы показать свою ошибку.

Часть моего исходного кода приведена ниже

 class GameLogic:
    def __init__(self, dungeon_name="game1.txt"):
        """Constructor of the GameLogic class.

        Parameters:
            dungeon_name (str): The name of the level.
        """
        self._dungeon = load_game(dungeon_name)
        self._dungeon_size = len(self._dungeon)

        #you need to implement the Player class first.
        self._player = Player(GAME_LEVELS[dungeon_name])

        #you need to implement the init_game_information() method for this.
        self._game_information = self.init_game_information()

        self._win = False


class Player(Entity):
    def __init__(self,move_count):
        super().__init__()
        self.move_count = move_count
        self._name = 'Player('O')'
        self._player_position = player_position
        self._inventory = []

    def get_id(self):
        entity_id = {self:'O'}
        return entity_id.get(self)

    def can_collide(self):
        return super().can_collide()

    def set_collide(self, collidable):
        return super().set_collide(collidable)

    def __str__(self):
        return "{0}".format(self._name)

    def __repr__(self):
        return "{0}".format(self._name)

    def get_position(self):
        return self._player_position

    def set_position(self,position):
        self._player_position.pop()
        self._player_position.append(position)

    def change_move_count(self,number):
        self.move_count  = number

    def moves_remaining():
        return self.move_count

    def add_item(self,item):
        self._inventory.append(str(item))

    def get_inventory(self):
        return self._inventory
  

И когда я пытаюсь его запустить, он вызывает NameError:

 Traceback (most recent call last):
  File "a2.py", line 25, in __init__
    self._player = Player(GAME_LEVELS[dungeon_name])
NameError: name 'Player' is not defined
  

Комментарии:

1. Благодарим вас за предоставление обратной трассировки ошибки. Однако я не могу воспроизвести эту ошибку из вашего первого фрагмента. Когда я добавляю: g = GameLogic() я не получаю ошибки, но код работает нормально. Я вижу из вашей трассировки, что код a2.py включен. Есть GameLogic ли и Player оба в этом файле?

2. Да, первый фрагмент кода является своего рода упрощенным a2.py , но это не одно и то же. Я использую это, чтобы увидеть, где что-то пошло не так. Первый фрагмент кода, похоже, работает, но a2.py возвращает трассировку ошибки. Я не знаю, как с этим справиться.

3. Возможно, мне следует опубликовать полный код.

4. Нам нужны дополнительные сведения, чтобы иметь возможность воспроизвести ошибку,

5. кстати, у вас есть такие методы, как: can_collide() которые просто вызывают super().can_collide() . Они избыточны, поскольку ваш класс унаследует их по умолчанию.

Ответ №1:

Вам необходимо определить свой Player класс в своем коде, прежде чем вы его инициализируете.

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

Комментарии:

1. Вы имеете в виду класс GameLogic: self. _player = Player(GAME_LEVELS[dungeon_name]) def __init__(self, dungeon_name=»game1.txt «):

2. Я имею в виду ваши get_position get_inventory методы and . Чтобы получить доступ inventory или position просто вызвать Player._inventory или Player._player_position