What is the difference in python attributes with underscore in front and back
Possible Duplicate:
The meaning of a single- and a double-underscore before an object name in Python
我想知道这些在Python中的区别是什么?
1 2 3 4 | self._var1 self._var1_ self.__var1 self.__var1__ |
作为一个起点,您可能会从PEP8-Python代码风格指南中找到有用的这句话:
In addition, the following special forms using leading or trailing
underscores are recognized (these can generally be combined with any
case convention):
_single_leading_underscore : weak"internal use" indicator. E.g.from M import * does not import objects whose name starts with an underscore.
single_trailing_underscore_ : used by convention to avoid conflicts
with Python keyword, e.g.
Tkinter.Toplevel(master, class_='ClassName')
__double_leading_underscore : when naming a class attribute, invokes name mangling (inside class FooBar,__boo becomes_FooBar__boo ; see
below).
__double_leading_and_trailing_underscore__ :"magic" objects or attributes that live in user-controlled namespaces. E.g.__init__ ,
__import__ or__file__ . Never invent such names; only use them as documented.
不过,您是在类属性的上下文中询问的,所以让我们来看一下您的具体示例:
单前导下划线在类中命名一个属性
我从来没有见过
这个词实际上具有句法意义。从类范围内引用
但是,它存在一个理由;如果您使用大量继承,如果您只使用一个前导下划线,那么您就没有办法向阅读您的代码的人指示"private"和"protected"变量之间的区别——那些甚至不打算被子类访问的变量,以及子类可能访问的变量。但外界可能不会。因此,在这种情况下,使用单个尾随下划线表示"受保护",使用双下划线表示"私有"可能是一种有用的约定(名称管理允许子类在其子类中使用具有相同名称的变量,而不会导致冲突)。
双前导和尾随下划线