什么是Name_mangling以及python的下划线约定

name mangling (又叫name decoration命名修饰).在很多现代编程语言中,这一技术用来解决需要唯一名称而引起的问题,比如命名冲突/重载等.
在python中,双下划线开头的类变量就用到了name mangling技术,会自动加上类名前缀.
有什么用呢?可以防止意外在子类或者类外面被修改到.虽然单下划线开头的变量也有private的意味,但是更多的只是个约定,可以直接访问到.而双下划线开头的变量更彻底.

下面看代码.

#coding=utf-8
class A:
    def __init__(self):
        self.__foo = 'foo'
        self._bar = 'bar'
a = A()
print a.__dict__
print a._bar
print a.__foo #这句会报错

其中print a.__dict__输出{'_A__foo': 'foo', '_bar': 'bar'}
可以看到,__foo加上类名前缀变成了_A__foo.

下面汇总下python的下划线约定, 

  • _xxx:表示内部使用,不能被from M imoprt *导入
  • xxx_:表示避免和关键字冲突,如Tkinter.Toplevel(master, class_='ClassName')
  • __xxx:更彻底的private.用到了name mangling技术,会自动加上类名前缀.不能被子类和类外访问.
  • __xxx__:魔术方法或用户控制的命名空间.

更多约定详情到http://www.python.org/dev/peps/pep-0008/#descriptive-naming-styles

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值