【问题标题】:Dynamically creating instances of a class using list of strings as variable names for instances使用字符串列表作为实例的变量名动态创建类的实例
【发布时间】:2017-11-09 18:54:36
【问题描述】:

假设我想生成一个类的多个实例(例如 Car 类)。

我有需要在列表中使用的变量名称:

cars = ['Mustang', 'Camaro', 'Challenger']

如何遍历cars 列表并创建Car 类的实例,变量名称是cars 列表中的字符串。

基本上做同样的事情:

Mustang = Car()
Camaro = Car()
Challenger = Car()

我意识到动态创建变量是不受欢迎的,但是我正在使用它为研究中的每个参与者创建一个类的实例,因此我将他们的 ID 号放在一个列表中,并希望将此 ID 号用作变量类实例的名称。

【问题讨论】:

  • 这不仅仅是“皱眉”,它是一种反模式。这也没有任何意义。你几乎是在说“我知道这是一个糟糕的设计,我想放弃它”,因为......?
  • globals()["Mustang"] = Car()(带有所有感叹号)。
  • 变量名不重要,为什么不直接用dict呢?无论如何,在某种程度上,它是一样的。只需cars = {} 然后cars['Mustang'] = Car() 等等。那么你不必做任何奇怪的事情globals。一旦存在具有这些名称的变量,您将如何引用它们?

标签: python class


【解决方案1】:

试试这个希望它有帮助:https://repl.it/OAQv

class Car:
    pass

module_name = __import__('sys').modules[__name__]
setattr(module_name, 'Mustang', Car())
setattr(module_name, 'Camaro', Car())
setattr(module_name, 'Challenger', Car())

print(Mustang)
print(Camaro)
print(Challenger)

使用字符串列表动态创建类的实例

class Car:
    pass

module_name = __import__('sys').modules[__name__]
cars = ['Mustang', 'Camaro', 'Challenger']
for car in cars:
    setattr(module_name, car, Car())

print(Mustang)
print(Camaro)
print(Challenger)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-15
    • 2012-02-26
    • 2020-10-25
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多