我正在学习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
答案 0 :(得分:2)
您可以使用hasattr
和getattr
:
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])()