answer11_1_2.py

class Product:
    """商品を表すクラス。

    属性:
        _id(str):商品ID。
        name(str):商品名。
        price(int):価格。
    """

    def __init__(self, _id, name, price):
        self._id = _id
        self.name = name
        self.price = price

    def __str__(self):
        return f"{self._id} {self.name} {self.price}円"


class Cart:
    """ショッピングカートを表すクラス。

    属性:
        items(list):カートに入っている商品のリスト。
    """

    def __init__(self):
        self.items = []

    def add_item(self, product):
        """productをカートに追加する。"""
        self.items.append(product)

    def show(self):
        """カートにある商品をすべて表示する。"""
        for product in self.items:
            print(product)


cart = Cart()
cart.add_item(Product("A101", "ミニポーチ", 648))
cart.add_item(Product("A502", "ソックス", 385))
cart.show()

# 章末問題 11章【1】(2)解答例
#
# コンストラクタCartは引数を持たないので、メソッド__init__の定義の
# 仮引数はselfのみとなります(26行目)。その本体では、空のカートと
# するために、インスタンス変数itemsを空リストにします(27行目)。
#
# メソッドadd_itemは(29行目〜)Product型のインスタンスを1つ
# 引数としてとるので、仮引数はselfと、そのインスタンスを受ける
# 変数とします(29行目)。変数名はproductとしました。メソッドの本体で、
# リストitemsにproductを追加します(31行目)。
#
# メソッドshowでは(33行目〜)itemsの要素をそれぞれprintします
# (35〜36行目)。print(product)とすれば、print関数がproductの
# __str__を呼び出して文字列を取得し、それを出力してくれます。