我有一个字符串列表,像这样说:
listofstuff = ['string1', 'string2', 'string3', ...]
我为我想做的事情创建了一个自定义类对象。 我现在想要的只是创建一堆名为我列表中的字符串的所述对象。 我该怎么做?
所以我有这样的东西:
for object in listofstuff:
object = classthing(inputs)
但它不起作用。 我该怎么做?
编辑:也许我应该澄清一下。 我有一个可以更改的输入文件,在所述输入文件中是名称列表。 我想创建一堆类对象,这些对象在列表中都称为名称。
所以有人给了我一个清单,比如 东西 = ['汽车1', '汽车2', '汽车3']我现在想创建一堆新的 Car 对象,每个对象都称为 car1、car2 等。 这样以后我就可以做 car1.calculate_price() 之类的事情了。
编辑2:很抱歉所有的编辑,但我也想分享一些东西。 在我尝试做的事情中,对象以特定的方式组合在一起,但对用户来说并不明显。 所以它会像"car1_car23_car4"。 所以我想,如果我问用户,你想选择哪辆车?他们选择了 car4,它会创建一个名为 car1_car23_car4 的对象,而不是 car4。
动态创建名称不是正确的方法。 很容易丢失对它们的跟踪,使其超出或少于您需要的数量,或者意外覆盖现有名称。
更好的方法是创建一个字典,其中键是来自listofstrings
的字符串,值是类的实例。 您可以使用字典理解并编写以下内容:
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为了演示,我用name
替换了inputs
。 不过,您不必在实际代码中执行此操作。
假设您的字符串位于名为 listofstrings
的列表中,这将创建一个从字符串构造对象的相应列表(也假设类的 __init__
方法需要一个字符串参数):
listofobjects = [classthing(s) for s in listofstrings]
如果这就是您要查找的内容,请进一步阅读有关列表推导的信息。
虽然这回答了你的问题,但另一个答案可能是更好的方法。