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+ 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告