如何在方法-字典中返回给定键的值

时间:2019-04-19 21:10:48

标签: python dictionary

我正在尝试编写一个简单的自动售货机。 我有一个包含项目的Container类,而Items类包含诸如奖金和金额之类的信息。 ID标识项目。每个呼叫添加项将ID加1,因此每个项都是唯一的。 我想获得给定ID的奖品。 因此,例如:我添加了项目,它的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对象

1 个答案:

答案 0 :(得分:0)

  1. id是内置方法的名称。不要将其用作变量名-导致名称混淆。

  2. 您要在容器类中分配ID,但永远不要将其返回,这样人们就可以使用ID查找该项目。

  3. 在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