在IF语句中调用类函数,保持返回True

时间:2017-12-01 00:56:51

标签: python function class if-statement module

我有一个类Player(),其函数名为use_potion()。当我在IF语句中使用use_potion()时,首先它工作正常。当use_potion的返回值发生变化时,if语句会忽略更改!

以下是代码的一部分:

class Player():
    def __init__(self):
        inventory = ["potion"]

    def has_potion(self):
        return any(item == "Potion" for item in self.inventory):

在另一个模块中:

from Player import Player

def available_actions():
    moves = ["go east","go west"]
    if Player().has_potion():
        moves.append("use potion")
    return moves

当我调用available_actions()时,它会按原样返回所有三个移动。但是当从“玩家”()库存中移除“药水”时,available_actions STILL将返回所有三个移动,而不仅仅是“go east”和“go west”。 我不知道为什么会这样。

1 个答案:

答案 0 :(得分:2)

每次拨打Player时,您都要实例化一个新的available_actions。因为Player类附带了药水,所以它总会返回True

此外,您需要在初始化函数中将inventory保存到self

您应该在函数外部实例化播放器,然后将其作为参数传递。

from Player import Player

my_player = Player()

def available_actions(player):
    moves = ["go east","go west"]
    if player.has_potion():
        moves.append("use potion")
    return moves

available_actions(my_player)

并在Player.py文件中

class Player():
    def __init__(self):
        self.inventory = ["potion"]

    def has_potion(self):
        return 'potion' in self.inventory