【问题标题】:NameError: name 'Player' is not definedNameError:名称“播放器”未定义
【发布时间】:2020-09-26 14:17:14
【问题描述】:
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

【问题讨论】:

  • 感谢您提供错误回溯。但是,我无法从您的第一个 sn-p 中重现该错误。当我添加时:g = GameLogic() 我没有收到任何错误,但代码运行得很好。我从您的回溯中看到代码在a2.py 中。 GameLogicPlayer 都在这个文件中吗?
  • 是的,第一段代码是某种简化的a2.py,但它们并不相同。我用它来看看哪里出了问题。第一段代码似乎有效,但 a2.py 返回错误回溯。我不知道如何处理。
  • 也许我应该发布一个完整的代码。
  • 我们需要更多细节才能重现错误,
  • 顺便说一句,你有这样的方法:can_collide(),它只是调用super().can_collide()。这些是多余的,因为您的类将默认继承这些。

标签: python class nameerror


【解决方案1】:

在初始化之前,您需要在代码中定义 Player 类。

另一方面,您不需要编写显式的 getter 或 setter 方法,因为实例变量可以被 . 操作符访问和修改

【讨论】:

  • 你的意思是class GameLogic: self._player = Player(GAME_LEVELS[dungeon_name]) def __init__(self, dungeon_name="game1.txt"):
  • 我指的是您的get_positionget_inventory 方法。要访问inventoryposition,只需调用Player._inventoryPlayer._player_position
猜你喜欢
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 2019-01-26
相关资源
最近更新 更多