将字符串列表转换为对象

时间:2014-12-29 02:08:03

标签: python list dynamic-variables

我有一个字符串列表,比如说:

listofstuff = ['string1', 'string2', 'string3', ...]

我为自己想要做的事创建了一个自定义类对象。我现在想要的是创建一堆所谓的对象,这些对象在我的列表中命名为字符串。我怎么能这样做?

所以我有类似的东西:

for object in listofstuff:
     object = classthing(inputs)

但它不起作用。我该怎么做?

编辑:也许我应该澄清一下。我有一个可以更改的输入文件,并且在所述输入文件中是一个名称列表。我想创建一堆类对象,这些对象都被称为列表中的名称。

所以有人给我一个像这样的清单     stuff = ['car1','car2','car3'] 而我现在想要创建一堆新的Car对象,每个对象都叫做car1,car2等。所以以后我可以做car1.calculate_price()之类的东西。

编辑2:对所有编辑感到抱歉,但我也想分享一些内容。在我想要做的事情中,对象以特定的方式组合在一起,但对用户来说并不明显。所以它就像'car1_car23_car4'。所以我想,如果我问用户,你想选哪辆车?他们选择了car4,它会创建一个名为car1_car23_car4的对象,而不是car4。

2 个答案:

答案 0 :(得分:4)

动态创建名称不是正确的方法。松散跟踪它们,制造比你需要的更多或更少,或者意外地覆盖现有名称是非常容易的。

更好的方法是创建一个字典,其中键是listofstrings的字符串,值是类的实例。您可以使用dict comprehension并编写如下内容:

dct = {name: classthing(inputs) for name in listofstuff}

以下是 1 的演示:

>>> class classthing: # This represents your class
...     def __init__(self, name):
...         self.name = name
...
>>> listofstuff = ['Joe', 'Bob', 'Mary']
>>>
>>> dct = {name: classthing(name) for name in listofstuff}
>>> dct  # dct now holds all the data you need
{'Mary': <__main__.classthing object at 0x0205A6D0>, 'Joe': <__main__.classthing object at 0x0205A690>, 'Bob': <__main__.classthing object at 0x0205A6B0>}
>>>
>>> # Each value in dct is an individual instance of your class
>>> dct['Joe'].name
'Joe'
>>> dct['Bob'].name
'Bob'
>>> dct['Mary'].name
'Mary'
>>>

1 为了演示,我将inputs替换为name。但是,您不必在真实代码中执行此操作。

答案 1 :(得分:1)

假设您的字符串位于名为listofstrings的列表中,这将创建一个相应的列表来构造字符串中的对象(同时假设该类的__init__方法需要一个字符串参数):

listofobjects = [classthing(s) for s in listofstrings]

如果这是您正在寻找的内容,请进一步了解list comprehensions

虽然这可以回答你的问题,other answer可能是更好的方法。