【问题标题】:Using classes to access information使用类访问信息
【发布时间】:2016-04-17 21:31:24
【问题描述】:

我正在编写一个函数,它以代码的形式接受输入并返回一个字符串。

class Item(object):
    def __init__(self, code, name, stock, price):
        self.code = code
        self.name = name
        self.stock = stock
        self.price = price

beer = Item(124, "beer", 200, 12.90)

print(beer.code)

有什么方法可以从代码 124 中获得“啤酒”这个名称。就像用字典一样? dict = {124 : "beer"}

【问题讨论】:

  • 你的意思是beer.name
  • 对,我想访问 beer.name,只有在有意义的情况下才能访问 beer.code
  • 我强烈建议您考虑遵循基本教程,这是微不足道的东西。您可以将实例放入字典中,以code 为键。
  • 我不明白你的问题是什么?也许{beer.code: beer.name}

标签: python class python-3.x


【解决方案1】:

假设您首先创建了一个项目列表,例如

items = []
items.append(Item(124, "beer", 200, 12.90)
items.append(Item(125, "diapers", 100, 5.90)

然后您可以使用列表推导式来查找具有给定代码的项目,例如

beer = [item for item in items if item.code==124][0]

这假设您可以保证只有一项代码为 124。您甚至可以将其包装在一个函数中:

def find_item(code):
   return [item for item in items if item.code==124][0]

【讨论】:

    【解决方案2】:

    您可以创建一个 Inventory 类并执行以下操作:

    class Item(object):
        def __init__(self, code, name, stock, price):
            self.code = code
            self.name = name
            self.stock = stock
            self.price = price
    
        def __repr__(self):
            return '{}: {} - {} - {}'.format(self.code, self.name, self.stock, self.price)
    
    
    class Inventory(object):
        _inventory = {}
    
        def find(self, code):
            return self._inventory.get(code)
    
        def add_item(self, code, name, stock, price):
            if code in self._inventory:
                raise KeyError('item with this code already present')
            self._inventory[code] = Item(code, name, stock, price)
    
    
    inventory = Inventory()
    inventory.add_item(124, "beer", 200, 12.90)
    inventory.add_item(125, "another beer", 400, 8.10)
    
    search = inventory.find(124)
    print search
    print search.name
    

    输出:

    124: beer - 200 - 12.9
    beer
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 1970-01-01
      • 2014-12-30
      相关资源
      最近更新 更多