銀行の「口座」の抽象化を提供したいとします。function
Pythonでオブジェクトを使用する1つのアプローチを次に示します。
def account():
"""Return a dispatch dictionary representing a bank account.
>>> a = account()
>>> a['deposit'](100)
100
>>> a['withdraw'](90)
10
>>> a['withdraw'](90)
'Insufficient funds'
>>> a['balance']
10
"""
def withdraw(amount):
if amount > dispatch['balance']:
return 'Insufficient funds'
dispatch['balance'] -= amount
return dispatch['balance']
def deposit(amount):
dispatch['balance'] += amount
return dispatch['balance']
dispatch = {'balance': 0,
'withdraw': withdraw,
'deposit': deposit}
return dispatch
次に、型の抽象化(class
Pythonのキーワード)を使用した別のアプローチを示します。
class Account(object):
"""A bank account has a balance and an account holder.
>>> a = Account('John')
>>> a.deposit(100)
100
>>> a.withdraw(90)
10
>>> a.withdraw(90)
'Insufficient funds'
>>> a.balance
10
"""
def __init__(self, account_holder):
self.balance = 0
self.holder = account_holder
def deposit(self, amount):
"""Add amount to balance."""
self.balance = self.balance + amount
return self.balance
def withdraw(self, amount):
"""Subtract amount from balance if funds are available."""
if amount > self.balance:
return 'Insufficient funds'
self.balance = self.balance - amount
return self.balance
私の先生は、class
キーワードを紹介し、これらの箇条書きを見せて、トピック「オブジェクト指向プログラミング」を始めました。
オブジェクト指向プログラミング
モジュラープログラムを整理する方法:
- 抽象化の障壁
- メッセージパッシング
- 情報と関連する動作をまとめる
上記の定義を満たすには、最初のアプローチで十分だと思いますか?はいの場合、なぜclass
オブジェクト指向プログラミングを行うためにキーワードが必要なのですか?
foo.bar()
通常foo['bar']()
、と同じであり、まれに後者の構文が実際に役立つ場合があります。
class
が同様の最適化を行うと仮定します)。