我有一个父类:
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 :(得分:3)
return food
将立即终止您animal_food
的执行;它不会尝试完成循环。如果你想变得非常花哨,你可以使用yield food
将方法转换为生成器,但是对于这个例子你可能只想完全替换方法体:
def animal_food(self):
return Animal.animalFoods[self.__class__.__name__]
答案 1 :(得分:0)
请看这里:
foods = Animal.animalFoods[self.__class__.__name__]
for food in foods:
return food
对于foods
,是正确的,即['Grass', 'Trees']
。
但你做for food in foods: return food
。 return
只返回for loop
,因此您会得到一个结果。
答案 2 :(得分:0)
一旦函数或方法返回一个值,for循环执行就会停止。
如果您只想打印项目,可以将print
语句添加到类方法animal_food()
,如下所示:
def animal_food(self):
foods = Animal.animalFoods[self.__class__.__name__]
for food in foods:
print food
然后,调用Dumbo.animal_food()
将打印两个答案。