根据用户输入创建动态命名的变量[重复]
- 2025-03-26 09:08:00
- admin 原创
- 16
问题描述:
我刚刚开始学习编程,并且正在学习 Python 作为我的第一语言。作为练习,我正在尝试编写一个通讯录程序。用户使用命令提示符创建新联系人。新联系人是 Contacts 类的对象实例。
我知道如何在代码中实例化类对象,但如何根据用户输入创建一个具有变量名的对象?假设我提示用户输入一个名称——我如何获取该信息并将其用作新对象的变量名?
谢谢!!
解决方案 1:
从评论来看,你问的是这里不止一次被问到的问题。“如何创建动态命名的变量”。
答案:不要这样做。很可能有更好的方法可以解决这个问题。
解释:
如果您要创建动态命名的变量,那么一旦创建它们,您就无法很好地处理它们。当然,有办法检查全局和本地范围以查看其中的内容。但事实是,您应该对正在创建的内容有明确的控制权。
你应该做的是把它们放入字典中:
people = {}
name = raw_input("What name? ") # "person"
people[name] = User(name)
print people
# {'person': <User: "person">}
print people.keys()
# ['person']
这样,您就不会在命名空间中创建任意变量。现在,您有一个包含键和对象的字典作为值。允许用户提供的输入来驱动变量的命名也是一件麻烦事。
如需更多信息,只需在此处搜索同一主题,即可看到大量不应这样做的示例。无论您看到哪些示例向您展示如何使用 globals() 等,请听从我的建议,不要走那条路。爱和享受……也许拥抱和亲吻你的字典。
参考:
如何通过 while 循环动态创建变量?
是否可以在 Python 中“动态”创建局部变量? (不要这样做)
解决方案 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
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD