如何使用函数创建对象? (将字符串转换为对象名称)

时间:2016-10-10 20:06:45

标签: python-3.x

我刚刚开始学习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

1 个答案:

答案 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()

依旧......