Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从相应字符串返回类的更好方法_Python_Oop_Eval - Fatal编程技术网

Python 从相应字符串返回类的更好方法

Python 从相应字符串返回类的更好方法,python,oop,eval,Python,Oop,Eval,我正在为一个游戏编写一种幻想编程语言。解释器所做的部分工作是将代码(字符串)转换为命令对象。例如,以下代码: set var 1 创建一个名为var的变量,其值为1。在解释器中,这将创建Set命令类的新实例。目前,我有一个用于创建命令的if语句列表: if packet == "set": return commands.Set elif packet == "get": return commands.Get elif packet =

我正在为一个游戏编写一种幻想编程语言。解释器所做的部分工作是将代码(字符串)转换为命令对象。例如,以下代码:

set var 1
创建一个名为var的变量,其值为1。在解释器中,这将创建
Set
命令类的新实例。目前,我有一个用于创建命令的if语句列表:

    if packet == "set":
        return commands.Set
    elif packet == "get":
        return commands.Get
    elif packet == "print":
        return commands.Print
    elif packet == "goto":
        return commands.Goto
    elif packet == "add":
        return commands.Add
但在添加新命令时,这是一个真正的难题。我必须添加命令类,将其添加到语法列表中,然后将其添加到此处的表中

我意识到
eval
可以在这里帮助我,但我知道这是被看不起的

return eval("commands." + packet.capitalize())
有没有更好的方法来实现这一点,或者
eval
在这个用法中可以吗?

试试这个:

return getattr(commands, packet.capitalize())
试试这个:

return getattr(commands, packet.capitalize())