python init方法是不是私有方法_为什么Python的“私有”方法实际上不是私有的?...

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

Python使我们能够通过在名称前加上双下划线来创建类中的“私有”方法和变量,如下所示:__myPrivateMethod()..那么,如何解释这一点呢?>>> class MyClass:...     def myPublicMethod(self):...             print 'public method'...     def __myPrivateMethod(self):...

print 'this is private!!'... >>> obj = MyClass()>>> obj.myPublicMethod()public method

>>> obj.__myPrivateMethod()Traceback (most recent call last):

File "", line 1, in AttributeError: MyClass instance has no attribute '__myPrivateMethod'>>> dir(obj)['_MyClass__myPrivateMethod', '_

_doc__', '__module__', 'myPublicMethod']>>> obj._MyClass__myPrivateMethod()this is private!!

怎么回事?!

我给那些不太明白的人解释一下。>>> class MyClass:...     def myPublicMethod(self):...             print 'public method'...     def __myPrivateMethod(self):...

print 'this is private!!'... >>> obj = MyClass()

我所做的就是用一个公共方法和一个私有方法创建一个类并实例化它。

接下来,我称之为它的公共方法。>>> obj.myPublicMethod()public method

接下来,我尝试调用它的私有方法。>>> obj.__myPrivateMethod()Traceback (most recent call last):

File "", line 1, in AttributeError: MyClass instance has no attribute '__myPrivateMethod'

这里一切都很好,我们不能称之为。事实上,它是‘私人的’。其实不是。跑迪尔()在对象上,揭示了python为您的所有“私有”方法神奇地创建的一种新的神奇方法。>>> dir(obj)['_MyClass__myPrivateMethod', '__doc__', '__module__', 'myPublicMethod']

此新方法的名称始终是下划线,后面是类名,后面是方法名。>>> obj._MyClass__myPrivateMethod()this is private!!

封装就这么多了,嗯?

在任何情况下,我都听说Python不支持封装,那么为什么还要尝试呢?什么给予?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值