Python 作為一種物件導向的程式語言,提供了多種將資料封裝在類別中的方法。
這種封裝的關鍵方面之一是類別變數的可見性,可以將其分為公共變數、受保護變數和私有變數。在本文中,我們將探討如何在 Python 類別中定義公有、私有和受保護變數。
這些變數的行為與其他程式語言非常不同。這些存取控制只是Python中的命名約定,而不是物件的實際隱藏。
公共變數是最容易存取的變數類型。可以從課堂內外的任何地方存取它們。在Python中,除非明確定義,否則所有類別變數預設都是公共的。
範例:
class MyClass: def __init__(self, name): self.name = name # Public variable obj = MyClass("John") print(obj.name) # Accessible outside the class #Output : John
在此範例中,name 是一個公共變數。您可以從類外存取和修改它,沒有任何限制。
受保護的變數只能在類別及其子類別中存取。雖然 Python 不強制執行嚴格的存取控制,但表示變數受保護的約定是在其名稱前面加上一個底線 (_)。
範例:
class MyClass: def __init__(self, name, age): self._age = age # Protected variable class ChildClass(MyClass): def display(self): print(f"Age: {self._age}") # Accessible within a subclass obj = ChildClass("John", 30) obj.display() # Output: Age: 30
在此範例中,年齡是受保護的變數。雖然 Python 不會阻止您直接在類別外部存取它,但這樣做違反了預期用途。
私有變數只能在定義它們的類別中存取。 Python 在變數名前加上雙底線 (__) 來表示私有變數。這會觸發名稱修改,使從類別外部存取私有變數變得更加困難(但並非不可能)。
範例:
class MyClass: def __init__(self, name, age, salary): self.__salary = salary # Private variable def display_salary(self): print(f"Salary: {self.__salary}") # Accessible within the class obj = MyClass("John", 30, 50000) obj.display_salary() # Output: Salary: 50000 # Trying to access the private variable outside the class print(obj.__salary) # Raises AttributeError
在這個例子中,salary 是一個私有變數。如果您嘗試直接從類別外部存取它,Python 將引發 AttributeError。但是,您仍然可以使用名稱損壞的版本來存取它,儘管不鼓勵這樣做。
名稱修改範例:
print(obj._MyClass__salary) # Output: 50000
這行程式碼示範如何在內部重命名私有變數以包含類別名稱,使它們更難以存取。
雖然 Python 的存取控制是基於命名約定而不是嚴格執行,但遵循這些約定有助於保持程式碼的清晰度和完整性。了解如何定義和使用公共變數、受保護變數和私有變數對於 Python 中有效的物件導向程式設計至關重要。
以上是Python - 如何在類別中定義公有、私有和受保護變數的詳細內容。更多資訊請關注PHP中文網其他相關文章!