从相应的字符串 return 类 的更好方法
Better way to return classes from corresponding strings
我正在为游戏编写一种奇幻的编程语言。解释器所做的部分工作是将代码(字符串)转换为命令对象。例如下面的代码:
set var 1
创建一个名为 var 的变量,其值为 1。在解释器中,这将创建 Set
命令的一个新实例 class。目前,我有一个 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
但这在添加新命令时真的很痛苦。我必须添加命令 class,将其添加到语法列表,并将其添加到此处的 table。
我意识到 eval
可以帮助我,但我知道那是被人看不起的。
return eval("commands." + packet.capitalize())
有没有更好的方法,或者 eval
这种用法可以吗?
试试这个:
return getattr(commands, packet.capitalize())
我正在为游戏编写一种奇幻的编程语言。解释器所做的部分工作是将代码(字符串)转换为命令对象。例如下面的代码:
set var 1
创建一个名为 var 的变量,其值为 1。在解释器中,这将创建 Set
命令的一个新实例 class。目前,我有一个 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
但这在添加新命令时真的很痛苦。我必须添加命令 class,将其添加到语法列表,并将其添加到此处的 table。
我意识到 eval
可以帮助我,但我知道那是被人看不起的。
return eval("commands." + packet.capitalize())
有没有更好的方法,或者 eval
这种用法可以吗?
试试这个:
return getattr(commands, packet.capitalize())