从字典中调用方法?

时间:2017-08-01 17:07:36

标签: python dictionary

我正在学习python,我正在尝试用对象创建一个程序,如果你能帮助我,我会非常高兴。

我正在尝试从字典(字典操作)调用类Character(方法攻击)的方法。

在问题的行中play[1]是之前创建的对象;当用户输入“攻击”时,行play[1].actions[char]()应该调用play [1]对象的方法“攻击”,但它会给出错误,说对象播放[1]没有属性“actions”。我该如何访问该方法?

我已经理解为什么play[1].actions[char]()不起作用,但我无法想出另一种方法。

class Character:
 ......
   def attack():    
   print("something")

actions={"ATTACK":attack, "DEFEND": defend, "MAGIC":magic}

[...] ##in the rest of the code play[1] is created as Character

char=input("Choose Attack, Defend or Magic\n").upper()
if char in actions:
   print("ciao")
   play[1].actions[char]()  ##Houston, we have a problem
   break

2 个答案:

答案 0 :(得分:2)

您可以使用hasattrgetattr

if hasattr(play[1], actions[char]):
    getattr(play[1], actions[char])()

或不使用hasattr

def dummy():
    pass

getattr(play[1], actions[char], dummy)()

如果play[1]没有方法actions[char],这可确保不会出现错误。

答案 1 :(得分:1)

actions只是一本字典。它不是Character类的属性。你想要的是引用 属性的动作,从actions字典引用它:

getattr(play[1], actions[char])()