从字符串列表创建多个对象python

时间:2018-09-17 17:08:22

标签: python-3.x list oop

如果我要有一个列表aList = ['Apple', 'Banana', 'Cherry', 'Date'],并且我想使列表中的每个项目成为一个对象,例如,与Banana = AClass()等效。完成此操作后,我将能够为列表中的每个项目创建并调用self.anything

我该怎么做?
本质上,这就是我要实现的目标:

import random
class Fruit:
   def __init__(self):
        self.tastiness = random.randint(1,10)

fruits = ['Apple', 'Banana', 'Cherry', 'Date']
fruits[1] = Fruit()   # Creating a variable from the list
if Banana.tastiness < 5:
    print('Not tasty enough')

3 个答案:

答案 0 :(得分:4)

鉴于您的类和名称列表,您可以使用dict理解来创建水果实例,并可以通过其名称合理访问它们:

fruits = ['Apple', 'Banana', 'Cherry', 'Date']
fruits = {k: Fruit() for k in fruits}

if fruits['Banana'].tastiness < 5:
    print('Not tasty enough')

虽然可以使用动态名称创建变量(以便您的Banana.tastiness可以使用),但我强烈建议您这样做。

答案 1 :(得分:1)

IIUC,这是您想要做的:

使用字符串作为键:

dfruits = {}
for f in fruits:
    dfruits[f] = Fruit()

词典理解风格

dfruits = {i: Fruit() for i in fruits}

为字典使用整数键:

dfruits = {}
for i,f in enumerate(fruits):
    dfruits[i] = Fruit()

dfruits = {i: Fruit() for i, _ in enumerate(fruits)}

答案 2 :(得分:-1)

您可能会创建一个父类“ Fruit”,并为“ Apple”,“ Banana”等子类创建子类。

这里是描述您要做的事情的文章。

https://www.digitalocean.com/community/tutorials/understanding-class-inheritance-in-python-3

我知道您可以创建一个对象数组,其中各个项目继承其各自类的特征,但是,我相信这些对象必须事先初始化您的水果/特定水果类型的对象。

x = Apple()
x.taste = "bitter"
list.append(x)