从用户input创builddynamic命名variables

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

我知道如何从代码中实例化一个类对象,但是如何根据用户input创build一个带有variables名称的类? 假设我提示用户input一个名称 – 我如何获取这些信息并将其用于我的新对象的variables名称?

谢谢!!

从评论中发现,你问的是在这里不止一次被问到的东西。 “我如何创builddynamic命名的variables”。

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

说明:

如果您要创builddynamic命名的variables,那么一旦创build它们,就不太适合。 当然有办法检查全局和局部范围,看看有什么。 但事实是,你应该对正在创造的东西有明确的控制权。

你应该做的是把它们放进一个字典:

people = {} name = raw_input("What name? ") # "person" people[name] = User(name) print people # {'person': <User: "person">} print people.keys() # ['person'] 

这样你就不会在你的名字空间中创build任意variables。 你现在有一个键和对象的字典作为值。 这也是一个蠕虫允许用户提供的input来驱动variables的命名。

欲了解更多信息,只需在这里search相同的主题,看看为什么你不应该这样做的许多例子。 不pipe你看到什么样的例子,都会告诉你如何使用全局variables()等,请采取我的build议,不要走这条路。 爱和享受..也许拥抱和吻,你的字典。

参考文献:

  • 如何通过while循环dynamic创buildvariables?
  • 是否有可能“dynamic”在Python中创build本地variables? (不要这样做)

你不清楚为什么你想要实例化名称被确定为运行时的对象。 意识到这是非常重要的,这是不常见的做法。

这是可能的,但是,使用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