我有一个类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”。 我不知道为什么会这样。
答案 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