สมมติว่าเราต้องการให้มี "บัญชี" ที่เป็นนามธรรมในธนาคาร นี่คือวิธีหนึ่งโดยใช้function
วัตถุใน 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
นี่เป็นอีกวิธีการหนึ่งที่ใช้การพิมพ์นามธรรม (เช่น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']()
และในบางครั้งหายากไวยากรณ์หลังมีประโยชน์จริง
object['method'](args)
, Python object['method'](object, args)
วัตถุจริงจะเทียบเท่า สิ่งนี้จะเกี่ยวข้องเมื่อคลาสฐานเรียกเมธอดในคลาสย่อยเช่นในรูปแบบกลยุทธ์
class
ทำการปรับให้เหมาะสมแบบเดียวกัน)