Python 中的訪問修飾符:公有、私有和受保護
訪問修飾符被像 C++、Java、Python 等面向物件程式語言用來限制從類外部訪問類成員變數和方法。封裝是面向物件程式設計的一個原則,它使用訪問修飾符(如公有、私有和受保護)來保護類的內部資料。
Python 支援三種類型的訪問修飾符:公有、私有和受保護。這些訪問修飾符限制了從類外部的任何物件訪問類成員變數和方法。
公有訪問修飾符
預設情況下,成員變數和方法是公有的,這意味著它們可以從類外部或內部的任何地方訪問。不需要使用 public 關鍵字來使類或方法和屬性成為公有的。這是一個公有訪問修飾符的示例:
示例
學生類有兩個成員變數,name 和 age,以及一個列印成員變數值的方法 display。這兩個變數和方法都是公有的,因為沒有為它們分配特定的關鍵字。
class Student: def __init__(self, name, age): self.name = name self.age = age def display(self): print("Name:", self.name) print("Age:", self.age) s = Student("John", 20) s.display()
輸出
Name: John Age: 20
私有訪問修飾符
使用私有訪問修飾符的類屬性和方法只能在定義它們的類中訪問,不能從類外部訪問。在 Python 中,私有屬性和方法透過在宣告之前新增兩個下劃線 ('__') 字首來宣告。
示例
BankAccount 類被宣告為具有兩個私有變數,即 account_number 和 balance,以及一個私有屬性 display_balance,它列印銀行賬戶的餘額。由於屬性和方法都是私有的,因此在從類外部訪問它們時會引發 AttributeError 錯誤。
class BankAccount: def __init__(self, account_number, balance): self.__account_number = account_number self.__balance = balance def __display_balance(self): print("Balance:", self.__balance) b = BankAccount(1234567890, 5000) b.__display_balance()
輸出
AttributeError: 'BankAccount' object has no attribute '__display_balance'
受保護訪問修飾符
使用受保護訪問修飾符的類屬性和方法可以在類內部以及繼承受保護類的類中訪問。在 Python 中,受保護的成員和方法透過在名稱之前新增單個下劃線 ('_') 字首來宣告。
示例
Person 類有兩個受保護的屬性,即 _name 和 _age,以及一個受保護的方法 _display,它顯示 Person 類屬性的值。Student 類繼承自 Person 類,並添加了一個額外的屬性 _roll_number,它也是受保護的,以及一個公有方法 display,該方法透過建立 Student 類的例項來呼叫父類(即 Person 類)的 _display 方法。我們可以從類外部呼叫 display 方法,因為 display 方法是私有的,它呼叫 Person 類的受保護的 _display 方法。
class Person: def __init__(self, name, age): self._name = name self._age = age def _display(self): print("Name:", self._name) print("Age:", self._age) class Student(Person): def __init__(self, name, age, roll_number): super().__init__(name, age) self._roll_number = roll_number def display(self): self._display() print("Roll Number:", self._roll_number) s = Student("John", 20, 123) s.display()
輸出
Name: John Age: 20 Roll Number: 123
結論
在本文中,我們瞭解了三種訪問修飾符,它們在 Python 和其他面向物件程式語言中用於資料隱藏和保護。公有、私有和受保護是 Python 中使用的三種訪問修飾符。類的公有屬性和方法可以從類外部或內部的任何地方訪問。私有成員變數和屬性只能在宣告這些屬性和方法的類中訪問。當我們需要從類內部以及從繼承該類的類中訪問類的屬性和方法時,使用受保護的訪問修飾符。