首页 > 代码库 > 什么是Name_mangling以及python的下划线约定
什么是Name_mangling以及python的下划线约定
name mangling (又叫name decoration命名修饰).在很多现代编程语言中,这一技术用来解决需要唯一名称而引起的问题,比如命名冲突/重载等.
在python中,双下划线开头的类变量就用到了name mangling技术,会自动加上类名前缀.
有什么用呢?可以防止意外在子类或者类外面被修改到.虽然单下划线开头的变量也有private的意味,但是更多的只是个约定,可以直接访问到.而双下划线开头的变量更彻底.
其中print a.__dict__输出{‘_A__foo‘: ‘foo‘, ‘_bar‘: ‘bar‘}
可以看到,__foo加上类名前缀变成了_A__foo.
在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
什么是Name_mangling以及python的下划线约定
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。