面向对象错误

时间:2014-04-05 13:16:48

标签: python

方法:

- 构造函数不参数。

- get_stock_names():返回一个字符串列表,表示股票中所有食品的名称。

- has_stock(name):如果在库存中找到食品名称,则返回True。

- 装载(食物):将食物添加到库存中。

- sell(name):返回要出售的物品。要出售的物品是库存清单中与输入名称匹配的第一个食品。请记住从库存中删除已售出的食品。如果项目名称与列表中的任何项目名称不匹配,则返回None。

class Food(object):
    def __init__(self,name,nutrition,good_until):
        self.name = name
        self.nutrition = nutrition
        self.good_until = good_until
        self.age = 0

class FermentedFood(Food):
    def __init__(self,name,nutrition,good_after,good_until):
        super().__init__(name,nutrition,good_until)
        self.good_after = good_after

这是先前定义的

class VendingMachine(object):
    def __init__(self):
        self.obj = []
    def get_stock_names(self):
        return [i.name for i in self.obj]
    def has_stock(self,name):  
        return  name in [i.name for i in self.obj]
    def load(self,food):
        self.obj.append(food)
        return self.obj
    def sell(self,name):  
        for food in self.obj:
            if food.name == name:
                self.obj.remove(food)
                return food
        return None

machine = VendingMachine()
apple = Food("apple", 70, 7)
banana = Food("banana", 100, 4)
yoghurt = FermentedFood("yoghurt", 50, 0, 10)
machine.load(banana)
machine.load(apple)
machine.load(yoghurt)
machine.load(apple)
print(machine.get_stock_names())  #["banana", "apple", "yoghurt", "apple"])
print(machine.has_stock("apple"))
print(machine.sell("apple")) #True
print(machine.get_stock_names()) ##Since apple is sold so `["banana", "yoghurt", "apple"]`

这里的错误是在负载中。

由于每种水果最后都列在清单中,

machine.sell("banana") #banana
machine.get_stock_names() #[]
machine.load(banana) #None  

我没有为None

获得machine.load(banana)

我尝试将加载的定义更改为此

def load(self,food):
        if self.get_stock_names == []:
            return None
        else:
            self.obj.append(food)
            return self.obj

但我最终没有得到其他睾丸的结果

1 个答案:

答案 0 :(得分:0)

  

这里的错误是在负载中。

您的加载方法没有错误。它self.obj.append(food)和你说的一样:

  

- 装载(食物):将食物添加到库存中。

这正是应该做的,所以没事。


  

我没有得到机器载荷(香蕉)

你不应该(我不确定你为什么期望它返回None)。见这里为什么

def load(self,food):
    self.obj.append(food)
    return self.obj

您的加载方法返回附加food的列表。因为您传入banana作为参数,所以它将它附加到列表中。之后它返回列表(附加新的食物对象)。

load()将永远不会返回None,因为它返回列表对象,并且因为它是在创建自动售货机对象时创建的。 即使它是空的,它仍然作为列表存在,因此它不是None而是[]

如果列表为空并且您执行machine.load(None)之类的操作,则只需将None附加到列表并返回[None]

即使您没有提出任何真正的问题,我希望这可以帮助您解决问题。