Giả sử chúng tôi muốn cung cấp một bản tóm tắt của một "tài khoản" trong ngân hàng. Đây là một cách tiếp cận, sử dụng một function
đối tượng trong 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
Đây là một cách tiếp cận khác sử dụng trừu tượng kiểu (nghĩa là class
từ khóa trong 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
Giáo viên của tôi bắt đầu chủ đề "Lập trình hướng đối tượng" bằng cách giới thiệu class
từ khóa và cho chúng tôi thấy những gạch đầu dòng:
Lập trình hướng đối tượng
Một phương pháp để tổ chức các chương trình mô-đun:
- Rào cản trừu tượng
- Thông qua
- Kết hợp thông tin và hành vi liên quan
Bạn có nghĩ rằng cách tiếp cận đầu tiên sẽ đủ để đáp ứng định nghĩa trên? Nếu có, tại sao chúng ta cần class
từ khóa để lập trình hướng đối tượng?
foo.bar()
thường giống hệt foo['bar']()
và trong các trường hợp hiếm hoi, cú pháp sau thực sự hữu ích.
object['method'](args)
, các đối tượng Python thực sự tương đương với object['method'](object, args)
. Điều này trở nên có liên quan khi một lớp cơ sở gọi các phương thức trong một lớp con, ví dụ như trong Mẫu chiến lược.
class
thực hiện một tối ưu hóa tương tự).