[英]How to return the value of given key in method - dictionary
我想写一个简单的自动售货机。 我有Container类,其中包含项目和类项目包含奖品和金额等信息。 ID标识该项目。 每个调用添加项都会将ID递增1,因此每个项都是唯一的。 我想获得给定身份证的奖品。 所以例如:我添加项目,它有ID = 30,我给ID,它返回它的奖品。
我试过这样的东西,但它不起作用:
from Item import Item
class Container:
id = 30
def __init__(self, objects=None):
if objects is None:
objects = {}
self.objects = objects
def add_object(self, obj: Item):
self.objects.update({id: obj})
Container.id = container.id + 1
def get_length(self):
return len(self.objects)
def find_price_of_given_id(self, id):
# return self.objects.get(id).get_price()
pass
Cola = Item(20)
print(Cola.get_amount())
container = Container()
container.add_object(Cola)
print(container.objects.items())
物品类:
class Item:
def __init__(self, price,amount=5):
self.amount = amount
self.price = price
def get_price(self):
return self.price
def get_amount(self):
return self.amount
我不知道为什么print(container.objects.items())
返回dict_items([(<built-in function id>, <Item.Item object at 0x00000000022C8358>)])
,为什么不ID = 30 + Item对象
id
是内置方法的名称。 不要将它用作变量名称 - 导致名称混淆。
您在容器类中分配了id,但从未将其返回,以便人们可以使用id查找项目。
在python3中, dict.items
返回一个dict_items
迭代器,因此你需要迭代它以获取其中的项目。
class Item:
def __init__(self, price, amount=5):
self.amount = amount
self.price = price
def get_price(self):
return self.price
def get_amount(self):
return self.amount
def __str__(self):
return f"{self.amount} @ {self.price}"
class Container:
item_id = 30
def __init__(self, objects=None):
if objects is None:
objects = {}
self.objects = objects
def add_object(self, obj: Item):
id_to_assign = Container.item_id
self.objects.update({id_to_assign: obj})
Container.item_id = Container.item_id + 1
return id_to_assign
def get_length(self):
return len(self.objects)
def find_price_of_given_id(self, item_id):
return self.objects.get(item_id).get_price()
Cola = Item(20)
print(Cola.get_amount())
container = Container()
cola_id = container.add_object(Cola)
print(container.objects.items())
print(container.find_price_of_given_id(cola_id))
输出:
5
dict_items([(30, <__main__.Item object at 0x104444b00>)])
20
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.