【问题标题】:How to call a method using the user's input in Python如何在 Python 中使用用户的输入调用方法
【发布时间】:2019-08-24 19:03:32
【问题描述】:

假设我有一堂课。这个类里面有两个方法。在该类之外,脚本要求用户输入。如何使用用户的输入来调用类中的方法?我想弄清楚这一点的原因是,如果我曾经在一个文件中有多个类,并且希望用户的输入能够与每个不同类中包含的方法进行交互。

我尝试使用引用类的命令列表,但我想不出似乎没有任何效果。我试图找到这个问题的答案,但我发现的一切都与用户输入调用不在类中的函数有关,我知道该怎么做。

这是我正在尝试做的一个简单示例:

class Character:
        def __init__(self, attributes = [], *args):
                self.name = attributes[0]
                self.health = attributes[1]

        def HEAL(self):
                self.health = self.health + 5
                return(self.health)

Spell_List = ["HEAL"]

Command_List = {"HEAL":Character}

Player = Character("John", 25)

Command = raw_input("Select an action: ").upper()

for Spell in Spell_List:
        if (Command == Spell):
                Command_Result = Player.Command_List[Command]()
                print(Command_Result)
        else:
                print("Action Not Recognized")

如果我要执行脚本并提供“heal”作为输入,我希望脚本调用 Character 类中的 HEAL 方法。这将打印数字 30,原因如下:

1.) Player 变量表明起始号码是 25。

2.) 该方法会将这个数字增加 5。

但是,按照现在编写脚本的方式,脚本会出错并指出以下内容: “AttributeError:字符实例没有属性‘Command_List’”。

你有什么想法?

【问题讨论】:

    标签: python input methods


    【解决方案1】:

    你可以在你的角色类上创建一个执行动作函数,然后你可以从任何你需要的地方调用它

    def perform_action(self, action, *args, **kwargs):
        actions = { 'HEAL': self.HEAL }
        return actions[action](*args, **kwargs)
    

    然后在你的课外你只需使用Player.perform_action('HEAL')

    Command_Result = Player.perform_action(Command)
    

    使用前添加错误处理

    【讨论】:

    • 非常感谢您的快速回复。在尝试您的解决方案时,我发现了一个认识。似乎当 player 变量调用类时, self.health 变量将名称视为数组。所以实际上,脚本将属性 [1] 视为字符串“John”中的第二个字符。不知道为什么会发生这种情况,但至少可以说很有趣。一旦我弄清楚了,我会正确地测试你的解决方案并让你知道会发生什么。
    • @DuckButterQ - 因为你传递参数的方式,你可以通过 Character(["John", 25]) 来修复它,但考虑到你实际使用它的方式,你最好在你的初始化为 name, health 而不是 attributes=[] (尽管进一步解决这个问题最好作为一个新问题提出)
    • 我修复了我的最新一期,你的添加就像一个魅力。感谢您的帮助。我现在对这类问题有了更好的理解。
    猜你喜欢
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多