iT邦幫忙

2024 iThome 鐵人賽

DAY 19
1
自我挑戰組

每日挑戰:從零開始的 Python 學習之旅系列 第 19

【Day 19】進階語法 - 物件導向概念篇 - 續集

  • 分享至 

  • xImage
  •  

Hi 大家好,

今天要開始介紹基礎語法中的物件導向篇之續集,那我們開始吧!

封裝(Encapsulation)

Q: 什麼是封裝?
A: 指的是將物件的資料(屬性)和行為(方法)包裝在一起,並通過控制訪問權限來保護資料。可以透過封裝,隱藏物件的內實作細節,僅開放部分的管道給使用者取用資料。

  • 設定一類別BankAccount、定義了三個公開的方法存錢deposit取錢withdraw餘額查詢get_balance
  • 設定私有屬性:在下列舉例中,__account_holder__balance 是私有屬性(以__作為開頭),這表示它們只能在 BankAccount 類別的內部被訪問,外部無法直接訪問或修改這些屬性。這樣的設計可以保護資料的安全性,避免外部不當的操作。
  • 設定公開方法:如 depositwithdrawget_balance 這些方法都是公開的,可以從類別外部呼叫到它們。這些方法提供了開放管道的方式來操作和存取封裝內部的資料。
class BankAccount:
    def __init__(self, account_holder, balance=0):
        # 私有屬性,只有在類別內部才能訪問
        self.__account_holder = account_holder
        self.__balance = balance

    # 用於存錢
    def deposit(self, amount):
        if amount > 0:
            self.__balance += amount
            print(f"存款成功!您的新餘額是 {self.__balance} 元。")
        else:
            print("存款金額必須大於 0。")

    # 用於取錢
    def withdraw(self, amount):
        if 0 < amount <= self.__balance:
            self.__balance -= amount
            print(f"取款成功!您的新餘額是 {self.__balance} 元。")
        else:
            print("餘額不足")

    # 用於餘額查詢
    def get_balance(self):
        return self.__balance

可以使用以下存款提款的操作來存取BankAccount類別

# 建立一個 BankAccount 物件
account = BankAccount("John Doe", 1000)

# 存款
account.deposit(500)

# 提款
account.withdraw(200)
PS D:\Project\practice> python hi.py
存款成功!您的新餘額是 1500 元。
取款成功!您的新餘額是 1300 元。
PS D:\Project\practice>

查詢餘額

print(account.get_balance())
PS D:\Project\practice> python hi.py
1300
PS D:\Project\practice>

如果要存取私有屬性__balance時,會發生錯誤

print(account.__balance)
PS D:\Project\practice> python hi.py
Traceback (most recent call last):
  File "D:\Project\practice\hi.py", line 40, in <module>
    print(account.__balance)  # AttributeError: 'BankAccount' object has no attribute '__balance'
          ^^^^^^^^^^^^^^^^^
AttributeError: 'BankAccount' object has no attribute '__balance'. Did you mean: 'get_balance'?
PS D:\Project\practice>

那今天就介紹到這裡,我們明天見~


上一篇
【Day 18】進階語法 - 物件導向概念篇 - 續集
下一篇
【Day 20】進階語法 - 物件導向概念篇 - 續集
系列文
每日挑戰:從零開始的 Python 學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言