【问题标题】:How Can I Dynamically Create Python Class Instances Using a List?如何使用列表动态创建 Python 类实例?
【发布时间】:2021-08-04 06:28:39
【问题描述】:

我正在尝试了解如何动态创建 python 类的实例。

下面的简单示例展示了如何创建类实例

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

emmy = Person("Emmy")
niels = Person("Niels")

print(emmy.name)
print(niels.name)

如果我想遍历一个列表来创建类实例,如何动态执行一个命令一样的

emmy = Person("Emmy")

我尝试使用 eval 或 exec 方法等动态执行此操作,以便我可以遍历列表并能够使用列表中的项目名称调用类实例名称。

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


people = ["Emmy","Niels"]

for item in people:
    eval('item = Person(item)')

print(emmy.name)
print(niels.name)

提前感谢您的任何建议。

【问题讨论】:

  • 您似乎希望在全局环境中拥有实例。你能不能把它们放在字典之类的容器里?如果是这样,那么a = {name: Person(name) for name in people}
  • 感谢您的建议。这样做有什么好处?
  • 确保所有东西都包含在一个容器中。它们可以很容易地访问。如果您必须在全局环境中拥有它们,那么只需在运行上述代码后执行globals().update(a),现在您可以运行Emmy.name

标签: python-3.x class exec eval


【解决方案1】:

我找到了一个解决方案,可以创建一个字符串变量以用作 exec 函数的命令。

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


people = ["Emmy","Niels"]

for item in people:
    
    a = str(item) + ' = Person("' + str(item) + '")'
    exec(a)

print(Emmy.name)
print(Niels.name)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    相关资源
    最近更新 更多