from operator import attrgetter
from pprint import pprint

class Product(object):
    def __init__(self, number, name, supplier_name, supplier_id, quantity=0):
        self.number = number
        self.name = name
        self.supplier_name = supplier_name
        self.supplier_id = supplier_id
        self.quantity = quantity
    def __repr__(self):
        data = (self.number, self.name, self.supplier_name, 
            self.supplier_id, self.quantity)
        return repr(data)
    def __lt__(self, other):
        return self.number < other.number
    def __eq__(self, other):
        return self.number == other.number
    def __hash__(self):
        return hash(self.number)
    by_number = attrgetter('number')
    by_name = attrgetter('name')
    by_supplier_name = attrgetter('supplier_name')
    by_supplier_id = attrgetter('supplier_id')
    by_quantity = attrgetter('quantity')

stock_set = {
    Product(1004, 'Clapper', 'Joseph Enterprises', 888, 32), 
    Product(1002, 'Chia Elmer Fudd', 'Joseph Enterprises', 888, 56), 
    Product(1006, 'Veg-O-Matic', 'Ronco', 999, 9), 
    Product(1003, 'Pocket Fisherman', 'Ronco', 999, 17), 
    Product(1007, 'Bass-O-Matic', 'Dan Aykroyd', 666, 25), 
    Product(1005, 'Phone Glove', 'Craig Ferguson', 777), 
    Product(1001, 'Clapper Plus', 'Joseph Enterprises', 888, 44), 
}
pprint(stock_set)
pprint(sorted(stock_set, key=Product.by_name))
most = max(stock_set, key=Product.by_quantity)
print(most.number)
print()

stock_dict = {prod.number:prod for prod in stock_set}
pprint(stock_dict)
pprint(sorted(stock_dict.values(), key=Product.by_name))  # pass dict values!
most = max(stock_dict.values(), key=Product.by_quantity)  # pass dict values!
print(most.number)
print(stock_dict[most.number])
