我刚刚开始学习Python,我正在制作的第一个项目是一个基于文本的冒险游戏,但是我遇到了一个问题。我需要一个函数,使用以字符串命名的类Goblin生成更多对象。
def spawn(name):
title = name
exec("{0} = {1}".format('title', Goblin))
return title, 'spawn'
本质上,另一个函数调用此函数来创建另一个Goblin(一个类),使用输入名称(一个字符串)作为新Goblin的名称。
我不支持的是,当我运行代码时(使用“bill”作为参数),它给了我这个错误。
bill = <class '__main__.Goblin'>
^
SyntaxError: invalid syntax
我的功能不应该等同于:
bill = Goblin
答案 0 :(得分:0)
执行此操作时:
exec("{0} = {1}".format('title', Goblin))
format
方法通过调用默认Goblin
方法转换__str__
类,该方法产生<class '__main__.Goblin'>
请改为:
exec("{0} = {1}".format('title', 'Goblin'))
等待!不要这样做,只需这样做:
title = Goblin
因为它完全等同(没有任何安全问题:))。
但是,这只会将Goblin
类别名为title
。毕竟没有真正的兴趣(除非你想创建一个实例?:title = Goblin()
)
用你的评论:“我想要一个以字符串命名的地精所代表的地精”我得到它:你需要
exec("{0} = {1}".format(title, 'Goblin()'))
(第一个arg没有引号,因此使用了您传递的名称,第二个()
用于创建实例)
再次说明:这实际上是一种笨拙的做法。如果你想遍历所有你的哥布林怎么办?
创建字典会好得多:
goblins_dict = dict()
goblins_dict["my_goblin"] = Goblin()
goblins_dict["my_goblin_2"] = Goblin()
依旧......