从用户输入创建动态命名的变量

时间:2012-07-06 00:06:37

标签: python

我正在学习编程并且正在学习Python作为我的第一语言。作为练习,我正在尝试编写一个地址簿程序。用户使用命令提示符创建新联系人。新联系人是Contacts类的对象实例。

我知道如何从代码中实例化一个类对象,但是如何根据用户输入创建一个带有变量名的对象呢?假设我提示用户输入一个名称 - 如何获取该信息并将其用作我的新对象的变量名?

谢谢!

2 个答案:

答案 0 :(得分:19)

从评论中可以看出,你问的是在这里不止一次被问过的事情。 “我如何创建动态命名的变量”。

答案:不要这样做。有可能有更好的方法来解决问题。

<强>解释

如果要创建动态命名的变量,那么在创建变量后,它们就无法很好地处理它们。当然有办法检查全局和局部范围,看看有什么。但事实是,您应该对正在创建的内容有明确的控制权。

你应该做的是将它们放入字典中:

people = {}
name = raw_input("What name? ") # "person"
people[name] = User(name)

print people
# {'person': <User: "person">}

print people.keys()
# ['person']

这样您就不会在命名空间中创建任意变量。您现在有一个键和对象的字典作为值。它也是一种允许用户提供的输入来驱动变量命名的蠕虫。

有关详细信息,请在此处搜索相同主题,并查看大量不应执行此操作的示例。无论你看到哪些例子告诉你如何使用globals()等,请采取我的建议,不要走那条路。爱和享受......也许拥抱和亲吻,你的词典。

参考文献:

答案 1 :(得分:0)

您无法明确为什么要实例化根据需要将名称确定为运行时的对象。重要的是要意识到这不是常见的做法。

但是,可以使用setattr builtin:

setattr(someobject, name, user)

更正常的用法是使用字典。因此,如果您有多个用户实例并希望存储它们,则可以将它们存储在如下所示的字典中。这将允许您按名称引用对象。

class User(object):

    def __init__(self, name):
        self.name = name


users = {}

name = raw_input("What name?")
users[name] = User(name)


print users
print users['Andre'].name

示例输出:

What name?Andre
{'Andre': <__main__.User object at 0x7f6b418a8710>}
Andre