1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| #!/usr/bin/env python3
# coding: utf-8
class Product:
def __init__(self, name, price, tpe=None):
self.name = name
self.price = price
self.state = "CRU"
self.type = tpe
# __init__()
def __repr__(self):
return "{0}|{1} ({2}$) - {3}".format(self.type, self.name, self.price, self.state)
def __str__(self):
return repr(self)
@staticmethod
def sort_by_name(lst, *args, **kwargs):
return sorted(lst, key=lambda x:x.name, *args, **kwargs)
@staticmethod
def sort_by_price(lst, *args, **kwargs):
return sorted(lst, key=lambda x:x.price, *args, **kwargs)
@staticmethod
def sort_by_any(lst, item, *args, **kwargs):
return sorted(lst, key=lambda x:x.__dict__[item], *args, **kwargs)
# class Product
class Inventory:
def __init__(self, items=None):
self.__items=list(items) if items is not None else list()
def __str__(self): return "".join("%s\n" % x for x in self.__items)
def __getitem__(self, idx): return self.__items[idx]
def append(self, v): self.__items.append(v)
# class Inventory
inventory = Inventory()
for (name, price, tpe) in (
("cote de porc", 5, "Buchery"),
("saucisse", 2, "Buchery"),
("pain", 1.5, "Bakery"),
("pistolet", 0.5, "Bakery"),
("tomate", 0.3, "Vege"),
("oignon", 0.4, "Vege"),
): inventory.append(Product(name, price, tpe))
# Autre écriture qui permet de se passer de append()
inventory=Inventory(
Product(name, price, tpe) for (name, price, tpe) in (
("cote de porc", 5, "Buchery"),
("saucisse", 2, "Buchery"),
("pain", 1.5, "Bakery"),
("pistolet", 0.5, "Bakery"),
("tomate", 0.3, "Vege"),
("oignon", 0.4, "Vege"),
)
)
print(inventory)
# Afficher les objets triés (ça utilisera __getitem__ de l'objet Inventory)
print("Test 1")
print(Product.sort_by_name(inventory, reverse=True))
print(Product.sort_by_price(inventory))
print(Product.sort_by_any(inventory, "type", reverse=False))
# Créer un inventaire déjà trié
print("Test 2")
sorted_inventory=Inventory(Product.sort_by_any(inventory, "price", reverse=True))
print(sorted_inventory, type(sorted_inventory)) |
Partager