首页 > 后端开发 > Python教程 > Python 的'私有”方法真的是私有的吗?

Python 的'私有”方法真的是私有的吗?

Barbara Streisand
发布: 2024-12-02 22:33:11
原创
469 人浏览过

Are Python's

为什么 Python 的“私有”方法实际上不是私有的

尽管双下划线前缀通常用于在 Python 中表示“私有”方法,用户可以通过稍微不同的命名约定来访问这些方法。

Python 解释器重命名这些“私有”方法为“_ClassName__MethodName”。因此,所谓的“私有”方法“__myPrivateMethod()”可以作为“_MyClass__myPrivateMethod()”来调用。

此名称加扰并非旨在作为一种封装形式或防止外部访问。相反,它用于确保子类不会无意中覆盖其超类的“私有”方法。

考虑以下示例:

class Foo(object):
    def __init__(self):
        self.__baz = 42
    def foo(self):
        print(self.__baz)
    
class Bar(Foo):
    def __init__(self):
        super(Bar, self).__init__()
        self.__baz = 21
    def bar(self):
        print(self.__baz)
登录后复制

当我们创建 Bar 的实例并调用无论是 foo() 还是 bar(),我们都会看到以下输出:

x = Bar()
x.foo()
42
x.bar()
21
登录后复制

如输出所示,子类成功覆盖 __baz 的值,而不影响超类的“私有”属性。此外,访问 x.__dict__ 显示 __baz 属性的两个版本在子类实例中共存。

虽然此名称加扰可能会阻止意外覆盖,但它并不能阻止从外部源有意访问“私有”方法。因此,Python 的“私有”方法并不是真正私有的,不应该依赖于封装。

以上是Python 的'私有”方法真的是私有的吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板