从用户inpu创建动态命名变量

2024-06-17 08:59:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是在学习编程,并学习Python作为我的第一语言。作为练习,我想写一个通讯录程序。新联系人由用户使用命令提示符创建。新联系人是联系人类的对象实例。

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

谢谢!!


Tags: 对象实例代码用户程序名称语言信息
2条回答

您不清楚为什么要实例化名称按您希望的方式确定为运行时的对象。重要的是要认识到这不是普遍的做法。

不过,可以使用setattr内置:

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

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

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

说明:

如果您要创建动态命名的变量,那么一旦创建它们,您就不能很好地处理它们。当然有办法检查全局和本地作用域,看看有什么。但事实是,你应该对创造的东西有明确的控制权。

你应该做的是把它们放到字典里:

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

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

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

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

更多信息,只需在这里搜索相同的主题,并看到许多例子,为什么你不应该这样做。无论你看到什么样的例子告诉你如何使用globals()等,请采纳我的建议,不要走那种路线。爱和享受…也许拥抱和亲吻,你的字典。

参考文献:

相关问题 更多 >