#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