我必须在Python2.7中实现所有抽象方法吗?

2024-04-29 15:35:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在调整text adventure game tutorialgithub,以适应python 2.7。我正在使用PyCharm 4.5.4社区版作为我的IDE。当我不重写父方法时,它会给我一个错误:

Class WolfRoom must implement all abstract methods

一开始为了消除这个错误,我将缺少的方法def modify_player(self, the_player):定义为pass,但我很快意识到我正在用没有任何东西覆盖方法,这不是我想要的。现在,如果我只是从WolfRoom类中删除该方法,我会得到一个IDE错误,如上图所示,但是当我运行游戏时,它看起来工作得很好。我应该不使用这个方法,还是定义它并使用super()

下面是一些代码片段:

class MapTile(object):
    """The base class for all Map Tiles"""

    def __init__(self, x, y):
        """Creates a new tile.
        Attributes:
            :param x: The x coordinate of the tile.
            :param y: The y coordinate of the tile.
        """
        self.x = x
        self.y = y

    def intro_text(self):
        """Information to be displayed when the player moves into this tile."""
        raise NotImplementedError()

    def modify_player(self, the_player):
        """Process actions that change the state of the player."""
        raise NotImplementedError()

    def adjacent_moves(self):
        """Returns all move actions for adjacent tiles."""
        moves = []
        if world.tile_exists(self.x + 1, self.y):
            moves.append(actions.MoveEast())
        if world.tile_exists(self.x - 1, self.y):
            moves.append(actions.MoveWest())
        if world.tile_exists(self.x, self.y - 1):
            moves.append(actions.MoveNorth())
        if world.tile_exists(self.x, self.y + 1):
            moves.append(actions.MoveSouth())
        return moves

    def available_actions(self):
        """Returns all of the available actions in this room"""
        moves = self.adjacent_moves()
        moves.append(actions.ViewInventory())
        return moves

。。。

class EnemyRoom(MapTile):
    def __init__(self, x, y, enemy):
        self.enemy = enemy
        super(EnemyRoom, self).__init__(x, y)

    def intro_text(self):
        pass

    def modify_player(self, the_player):
        if self.enemy.is_alive():
            the_player.hp = the_player.hp - self.enemy.damage
            print("Enemy does {} damage. You have {} HP remaining.".format(self.enemy.damage, the_player.hp))

    def available_actions(self):
        if self.enemy.is_alive():
            return [actions.Flee(tile=self), actions.Attack(enemy=self.enemy)]
        else:
            return self.adjacent_moves()

。。。

class WolfRoom(EnemyRoom):
    def __init__(self, x, y):
        super(WolfRoom, self).__init__(x, y, enemies.Wolf())

    def intro_text(self):
        if self.enemy.is_alive():
            return """
            A grey wolf blocks your path. His lips curl to expose canines as white as
            the nights sky. He crouches and prepares to lunge.
            """
        else:
            return"""
            The corpse of a grey wolf lays rotting on the ground.
            """

Tags: ofthe方法textselfactionsreturnif