首页 > 后端开发 > Python教程 > Python 的'私有”方法到底有多私有?

Python 的'私有”方法到底有多私有?

Barbara Streisand
发布: 2024-12-11 12:15:11
原创
608 人浏览过

How Private Are Python's

Python 的“私有”方法:并不像看起来那么难以理解

尽管人们误认为 Python 的“私有”方法提供了强大的封装性,但仔细检查就会发现它们并不是真正的私有。虽然在方法前添加双下划线 (__myPrivateMethod()) 表示私有作用域,但它实际上创建了一个具有修改名称的方法。

例如,以下类演示了此行为:

class MyClass:
    def myPublicMethod(self):
        print('public method')

    def __myPrivateMethod(self):
        print('this is private!!')
登录后复制

当实例化此类的对象时,人们会期望无法访问私有的方法:

obj = MyClass()
obj.myPublicMethod()
登录后复制

但是,后续的 dir(obj) 调用揭示了一个神奇创建的方法的存在:

dir(obj)
['_MyClass__myPrivateMethod', '__doc__', '__module__', 'myPublicMethod']
登录后复制

调用此方法揭示了“私有”数据:

obj._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)

x = Bar()
x.foo()  # 42
x.bar()  # 21
print(x.__dict__)  # {'_Bar__baz': 21, '_Foo__baz': 42}
登录后复制

综上所述,Python 的“私有”方法并不是真正私有的,允许子类访问它们。这种设计选择优先考虑子类化的灵活性而不是严格的封装,但它也需要开发人员谨慎使用以维护代码完整性。

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

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