2

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

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。

4

2 回答 2

4

动态创建名称不是正确的方法。很容易忘记它们,制作比您需要的更多或更少,或者意外覆盖现有名称。

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

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为了演示,我inputsname. 不过,您不必在真实代码中执行此操作。

于 2014-12-29T02:17:24.880 回答
3

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

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

如果这就是您要查找的内容,请进一步阅读列表推导

虽然这回答了您的问题,但另一个答案可能是更好的方法。

于 2014-12-29T02:13:12.650 回答