Python中的私有方法


在面向物件程式設計中,私有方法是作為訪問修飾符的函式,僅供類內部使用,外部無法訪問。私有方法的功能主要用於封裝,這意味著它們是隱藏的,以防止意外修改和濫用。

私有方法的工作原理

在Python中,表示私有方法的約定是“_”。我們只需要在方法名前新增一個下劃線(_)或兩個下劃線(__)

  • 單個下劃線(_):表示該方法用於內部使用。它仍然可以從類外部訪問。

  • 雙下劃線(__):不能透過函式名從函式外部訪問。它仍然可以透過“名稱改編”方法訪問,這使得從類外部訪問更加困難。

使用私有方法

要定義私有方法,我們必須在成員名前新增一個下劃線(“_”)或兩個下劃線(“__”)。如果使用單個下劃線,我們只能在類內訪問它。而使用雙下劃線,則允許我們從任何基類訪問該方法。

示例

在下面的示例程式碼中,__private method 是一個私有方法。我們不能直接從類MyClass外部呼叫它,但可以在類內部呼叫它,例如在public_method中。

class MyClass:
    def __init__(self, value):
        self.value = value
		
	# Private method 
    def __private_method(self):  
        return self.value ** 2
	
	# Public method
    def public_method(self):    
        return self.__private_method() 

obj = MyClass(5)
print(obj.public_method())  

輸出

25

單個下劃線私有方法

如果私有方法字首為單個下劃線,則表示它按照約定應為“私有”,並且不鼓勵直接從類外部呼叫它。

示例

在下面的示例程式碼中,public_method 呼叫_private_method,這在類內部是允許的。

class MyClass:
    def _private_method(self):  # Single underscore private method
        print("This is a private method")
        
    def public_method(self):
        self._private_method()

obj = MyClass()
obj.public_method()   
# obj._private_method() 

輸出

This is a private method

雙下劃線私有方法

我們可以使用雙下劃線私有方法__private_method 使屬性或方法更難以從類外部訪問,以避免意外修改。

示例

名稱改編修改了方法的內部名稱使其唯一,例如,在下面的示例程式碼中,使用_MyClass__private_method 來訪問私有方法。

class MyClass:
    def __private_method(self):
        print("This is a truly private method")
        
    def public_method(self):
        self.__private_method()

obj = MyClass()
obj.public_method()  

# Using name mangling to access the private method
obj._MyClass__private_method()  

輸出

This is a truly private method
This is a truly private method

私有方法與公共方法

私有方法和公共方法之間的一些關鍵區別如下所示。

特性 私有方法 公共方法
定義 方法僅在類內可訪問。 方法可在任何地方(類內或類外)訪問。
命名約定 單個或雙下劃線(例如:def_method() 或 def__method())。 沒有前導下劃線(例如:def method())。
訪問 在類外部隱藏屬性/方法。 屬性/方法允許公開訪問。
目的 設計用於類內部使用,以隱藏實現細節。 設計供外部程式碼或子類使用。

更新於:2024年10月17日

1K+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告