我有一个字符串列表,比如说:
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。
答案 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可能是更好的方法。