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())。 |
访问 | 在类外部隐藏属性/方法。 | 属性/方法允许公开访问。 |
目的 | 设计用于类内部使用,以隐藏实现细节。 | 设计供外部代码或子类使用。 |
广告