2016-06-22 327 views
0

我有一个父类的列表值:遍历字典中的

class Animal(object): 

    animalFoods = {'Elephant': ['Grass', 'Trees'], 'Turtle': 'Fish'} 

    def animal_food(self): 
     foods = Animal.animalFoods[self.__class__.__name__] 
     for food in foods: 
      return food 

然后,我有一个子类:

class Elephant(Animal): 
    pass 

我创建一个对象:

Dumbo = Elephant() 

而且尝试打印出其食物选择:

>>> print(Dumbo.animal_food()) 
Grass 

我希望它打印出来

Grass 
Trees 

我看到它是如何通过寻找animalFoods字典中的关键工作,但我不知道为什么它不值列表返回两个值。

指向额外阅读的指针只是提供了一个快速和肮脏的答案,因为这是我第一次使用超出单值的字典。

+0

由于您已经有食物'食物= Animal.animalFoods [self .__ class __.__ name __]'的列表,因此不需要重复该列表。此外,如果你想打印列表中的项目,你可以看看[Pythonic的方式来打印列表项目](http://stackoverflow.com/questions/15769246/pythonic-way-to-print-list-items) 。或者如果你想迭代列表,那么你停止在中途的原因,正如@Alex指出的那样,以'return'结尾 –

+0

谢谢你的额外帮助链接:) –

回答

3

return food将立即结束您的执行animal_food;它不会尝试完成循环。如果你想获得很花哨,你可以使用yield food打开方法变成发电机,但可能在这个例子中,你只是想完全替代方法体:

def animal_food(self): 
    return Animal.animalFoods[self.__class__.__name__] 
0

请看这里:

foods = Animal.animalFoods[self.__class__.__name__] 
for food in foods: 
    return food 

对于foods,这是正确的,这是['Grass', 'Trees']

但是你做for food in foods: return foodreturn只是返回for loop,所以你会得到一个结果。

0

一旦函数或方法返回一个值,for循环执行就会停止。

如果你只是想打印的项目,你可以在print语句添加到类方法animal_food()这样的:

def animal_food(self): 
    foods = Animal.animalFoods[self.__class__.__name__] 
    for food in foods: 
    print food 

然后调用Dumbo.animal_food()将打印两个答案。