Katakanlah kami ingin memberikan abstraksi "akun" di bank. Inilah satu pendekatan, menggunakan function
objek dalam Python:
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
Berikut pendekatan lain menggunakan abstraksi tipe (yaitu, class
kata kunci dengan 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
Guru saya memulai topik "Pemrograman berorientasi objek" dengan memperkenalkan class
kata kunci, dan menunjukkan kepada kami poin-poin berikut:
Pemrograman berorientasi objek
Metode untuk mengatur program modular:
- Hambatan abstraksi
- Pesan lewat
- Menyatukan informasi dan perilaku terkait
Apakah Anda pikir pendekatan pertama akan cukup untuk memenuhi definisi di atas? Jika ya, mengapa kita perlu class
kata kunci untuk melakukan pemrograman berorientasi objek?
foo.bar()
biasanya identik dengan foo['bar']()
, dan pada kesempatan langka sintaks yang terakhir sebenarnya berguna.
object['method'](args)
, objek Python benar-benar melakukan hal yang setara object['method'](object, args)
. Ini menjadi relevan ketika kelas dasar memanggil metode dalam kelas anak, misalnya dalam Pola Strategi.
class
melakukan optimasi yang sama).