dunder_methods_03.py

#!/usr/bin/python3
# ====================================================================
# from: www.youtube.com/watch?v=y1ZWQQEe5PM
#       5 Useful Dunder Methods In Python
# ====================================================================


from dataclasses import dataclass


# ---- class definitions ---------------------------------------------

@dataclass(kw_only=True)
class Fruit:
        name: str
        grams: float

class Basket:
    
    def __init__(self,*, fruits: list[Fruit]) -> None:
        self.fruits = fruits

    def __getitem__(self,item: str) -> list[Fruit]:
        return [fruit for fruit in self.fruits if fruit.name.lower() == item]

# --------------------------------------------------------------------
# ---- main
# --------------------------------------------------------------------

def main() -> None:

    fruits: list[Fruit] =  [Fruit(name="Apple",grams=2500),
                            Fruit(name="Apple",grams=50),
                            Fruit(name="Orange",grams=1000),
                            Fruit(name="Orange",grams=9001),
                            Fruit(name="Banana",grams=1500)]

    basket: Basket = Basket(fruits=fruits)

    matches: list[Friut] = basket['apple']
    print(f'matches: {matches}')
    print(f'totals: {len(matches)}')

# --------------------------------------------------------------------
# ---- main
# --------------------------------------------------------------------

if __name__ == '__main__':
    
    main()