カプセル化の実例

はじめに

銀行口座のカプセル化の実例を見ていこう。

class BankAccount:
    def __init__(self, owner, balance=0):
        self.owner = owner
        self.__balance = balance  # __(アンダースコア2つ)で「非公開属性」にする

    # 残高を取得するメソッド(ゲッター)
    def get_balance(self):
        return self.__balance

    # 入金メソッド
    def deposit(self, amount):
        if amount > 0:
            self.__balance += amount
            print(f"{amount}円を入金しました。")
        else:
            print("入金額は正の数である必要があります。")

    # 出金メソッド
    def withdraw(self, amount):
        if 0 < amount <= self.__balance:
            self.__balance -= amount
            print(f"{amount}円を出金しました。")
        else:
            print("残高不足、または金額が不正です。")

# 利用例
account = BankAccount("Hiroki", 1000)

print(account.get_balance())  # 1000

account.deposit(500)          # 500円を入金しました。
print(account.get_balance())  # 1500

account.withdraw(2000)        # 残高不足、または金額が不正です。

accountインスタンス生成

Hirokiと1000を渡す。

コンストラクタで初期値の登録が行われる。

accountインスタンスの中身。ownerとカプセル化されたbalanceに情報が入っている。

get_balance関数で残高照会

出力結果

deposit関数で入金

デバッグコンソールで以下のように入金後の残高にアクセスしたが、カプセル化しているので、この方法は望ましくない。

以下のように、get_balance関数で残高にアクセスするのが正解。

withdraw関数で引き出し

amount = 2000は、self.__balance = 1500より大きいので、elseの条件ブロックが実行される。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です