クラスとは?
オブジェクト指向プログラミング(OOP)は、現実世界の概念をプログラミングに取り入れ、それをクラスとして表現します。クラスは、属性(変数)とメソッド(関数)を持つオブジェクトの設計図であり、それに基づいて実際のオブジェクトを作成します。本記事では、具体的な例としてBankAccount
クラスを設計し、オブジェクト指向プログラミングの基本を解説します。
BankAccountクラスの基本設計
BankAccount
クラスは、銀行口座を表すオブジェクトの設計です。基本的な機能として、口座番号、口座名義、残高の3つの属性を持ちます。また、預金と引き出しの2つのメソッドも提供します。
class BankAccount: def __init__(self, account_number, account_holder, balance=0): self.account_number = account_number self.account_holder = account_holder self.balance = balance def deposit(self, amount): self.balance += amount return f"Deposit of {amount} yen successful. Current balance: {self.balance} yen" def withdraw(self, amount): if amount > self.balance: return "Insufficient funds. Withdrawal failed." else: self.balance -= amount return f"Withdrawal of {amount} yen successful. Current balance: {self.balance} yen"
このクラスは、初期化メソッド__init__
で口座番号、口座名義、残高を初期化し、deposit
メソッドで預金、withdraw
メソッドで引き出しを行います。引き出しの際には残高不足の場合に適切なメッセージを返します。
BankAccountクラスの利用例
BankAccount
クラスを使って実際に口座を作成してみましょう。
# BankAccountクラスのインスタンス作成 my_account = BankAccount(account_number="123456", account_holder="John Doe", balance=10000) # 預金と引き出しの実行 print(my_account.deposit(5000)) # Deposit of 5000 yen successful. Current balance: 15000 yen print(my_account.withdraw(2000)) # Withdrawal of 2000 yen successful. Current balance: 13000 yen print(my_account.withdraw(15000)) # Insufficient funds. Withdrawal failed.
my_account
という名前のBankAccount
クラスのインスタンスを作成し、deposit
とwithdraw
メソッドを呼び出しています。これにより、口座の取引が実行され、残高が正しく更新されています。
カプセル化とプロパティ
OOPの概念の一つである「カプセル化」は、データとそのデータに関連するメソッドを一つのまとまり(クラス)に封じ込めることです。Pythonでは、属性に対して直接アクセスできないようにするために、アンダースコア(_
)を使ってプライベートな属性とすることがあります。また、プロパティを使ってアクセスをカスタマイズすることもできます。
class BankAccount: def __init__(self, account_number, account_holder, balance=0): self._account_number = account_number self._account_holder = account_holder self._balance = balance @property def balance(self): return f"Current balance: {self._balance} yen" @property def account_number(self): return f"Account number: {self._account_number}" @property def account_holder(self): return f"Account holder: {self._account_holder}" def deposit(self, amount): self._balance += amount return f"Deposit of {amount} yen successful. {self.balance}" def withdraw(self, amount): if amount > self._balance: return "Insufficient funds. Withdrawal failed." else: self._balance -= amount return f"Withdrawal of {amount} yen successful. {self.balance}"
このようにプロパティを利用することで、外部から直接_balance
などの属性にアクセスすることができなくなり、クラス内での適切な操作が促進されます。
ブログ記事のまとめ
本記事では、BankAccount
クラスの設計を通じて、オブジェクト指向プログラミングの基本を紹介しました。クラスとメソッド、カプセル化とプロパティの利用によって、より効果的で再利用可能なコードを構築することができます。これらの概念を理解し、実践することで、柔軟で拡張可能なプログラムを作成するスキルが向上します。
次回の提案テーマ: デザインパターン
次回のテーマとして「デザインパターン」を提案します。デザインパターンは、特定の問題に対する一般的な解決策のテンプレートとして定義されたもので、ソフトウェアの設計において非常に有用です。代表的なデザインパターンやそれらの具体的な適用例につい
て解説することで、より洗練されたプログラミングスキルを身につける手助けとなるでしょう。