2016-06-22 275 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()將打印兩個答案。