2016-04-17 3 views
-2

Я пишу функцию, которая принимает входные данные в виде кода и возвращает строку.Использование классов для доступа к информации

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"}

+3

Вы имеете в виду 'beer.name' ? – interjay

+0

Правильно, я хотел бы получить доступ к beer.name, только имея доступ к пивному коду, если это имеет смысл –

+0

Я бы настоятельно рекомендовал вам рассмотреть следующий базовый учебник, это тривиальный материал. Вы можете поместить экземпляр в словарь, с ключом «code». – jonrsharpe

ответ

0

Предполагая, что сначала вы создали список элементов, что-то вроде

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] 
0

Вы можете создать класс инвентаризации и сделать это:

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 
Смежные вопросы