Python Obj定向编程-从另一个类访问名称
方法: –构造函数不接受任何参数 –get_stock_names():返回一个字符串列表,该列表表示 库存中的所有食品 –has_stock(name):如果在库存中发现食品名称,则返回True –加载(食物):将食物对象添加到库存 –销售(名称):返回要销售的项目。要出售的物品是第一件 库存列表中与输入名称匹配的食物项。记住 从库存中取出已售出的食品。如果项目名称与任何 在列表中,返回NonePython Obj定向编程-从另一个类访问名称,python,Python,方法: –构造函数不接受任何参数 –get_stock_names():返回一个字符串列表,该列表表示 库存中的所有食品 –has_stock(name):如果在库存中发现食品名称,则返回True –加载(食物):将食物对象添加到库存 –销售(名称):返回要销售的项目。要出售的物品是第一件 库存列表中与输入名称匹配的食物项。记住 从库存中取出已售出的食品。如果项目名称与任何 在列表中,返回None class Food(object): def __init__(self,name,nu
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 load(self,food):
self.obj.append(food)
return self.obj
def get_stock_names(self):
return [i.name for i in self.obj]
def has_stock(self,name): # This part is wrong
return str(name) == self.obj
def sell(self,name): # This part is wrong as well
if str(self.name) == self.obj:
self.obj.remove(self.name)
else:
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"]`
那么有没有股票和卖出的问题呢
那么,你的股票和股票有什么问题吗
检查str(name)
是否等于self.obj
,这是一个列表。您想检查您传入的名称
是否在self.obj
中,这是一个有名称的食品
列表。您需要将其更改为以下内容:
def has_stock(self, name):
return name in [x.name for x in self.obj]
这将列出食品的名称,并检查您输入的名称是否在该列表中
在这里,您会犯类似的错误,将字符串与列表进行比较。另一个错误是,self.name
不存在。应将该部分更改为:
def sell(self, name):
for food in self.obj:
if food.name == name:
self.obj.remove(food)
return food
return None
这将在食物清单上循环。如果它发现一个食物
名称与您输入的名称匹配,它将从列表中删除食物
,然后返回它(我不确定您为什么要返回它,但这取决于您)。如果没有找到匹配项,代码将继续通过循环,并将返回None
这就是我得到的结果:
['banana', 'apple', 'yoghurt', 'apple']
True
<__main__.Food object at 0x00000000029CBB38>
['banana', 'yoghurt', 'apple']
[‘香蕉’、‘苹果’、‘酸奶’、‘苹果’]
真的
[‘香蕉’、‘酸奶’、‘苹果’]
那么,问题是什么?你的问题是什么?我已经编辑了alreadyDidn不适用于machine.get_stock_names()我得到[]然后machine.load(banana)给我None@TimIt适用于我,所以我不确定这是怎么回事。也许最好发一个新问题
def sell(self, name):
for food in self.obj:
if food.name == name:
self.obj.remove(food)
return food
return None
['banana', 'apple', 'yoghurt', 'apple']
True
<__main__.Food object at 0x00000000029CBB38>
['banana', 'yoghurt', 'apple']