python中的name mangle机制

#测试python中的name mangle机制

class A:
    __attr1=1                #私有 类属性
    def __init__(self):
        self.attr2=2         #私有 对象属性
    @classmethod
    def getAttr1(cls):       #定义类方法使用修饰器,并且传入类对象cls
        return cls.__attr1
    def getAttr2(self):
        return self.__attr2

      python中不存在私有变量,即类外可以访问到类内定义的私有变量。

      name mangle,即名称修饰,是python对私有变量采用的一种修饰机制

      python中没有访问控制符,如public,private等,在希望表示私有属性或私有方法时,使用两个下划线做前缀,python解释器会将该属性或者方法偷偷将其命名为“_类名__属性名/方法名”。


 注意虽然类属性__attr1被定义为私有属性,但是我们仍然可以在类外访问其值:

print(A._A__attr1)    #!注意此处类属性可通过类名或对象访问     



#结果
1
{'__module__': '__main__', '_A__attr1': 1, '__init__':
 <function A.__init__ at 0x7f01907cd048>, 
'getAttr1': <classmethod object at 0x7f0191b570f0>, 
'getAttr2': <function A.getAttr2 at 0x7f01907cd6a8>, 
'__dict__': <attribute '__dict__' of 'A' objects>,
 '__weakref__': <attribute '__weakref__' of 'A' objects>,
'__doc__': None}

总结:

python中的私有是假私有!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值