如何在Thread模块的__init__中定义的变量重命名为_Thread_ <variable name =“”> </variable>

时间:2012-10-08 18:02:38

标签: python multithreading name-mangling

我正在浏览Windows上的Active python 2.7.2 32位的threading模块(<Python Home>/lib/threading.py)的代码。在__init__的{​​{1}}函数中,定义了许多变量:

class Thread

以下是我如何调用self.__target = target self.__name = str(name or _newname()) self.__args = args self.__kwargs = kwargs self.__daemonic = self._set_daemon() self.__ident = None self.__started = Event() self.__stopped = False self.__block = Condition(Lock()) self.__initialized = True 的{​​{1}}函数: -

__init__

我无法理解变量class Thread未在class ThreadWithReturnValue(Thread): def __init__(self, group=None, target=None, name=None, args=(), kwargs={}, Verbose=None): Thread.__init__(self, group, target, name, args, kwargs, Verbose) self._return = None print 'in init: ', self._Thread__target 的{​​{1}}函数中的任何位置初始化。但是,如果我在自己的self._Thread__target函数中打印此变量,则会显示__init__的{​​{1}}函数中class Thread的实际值。

此外,我尝试编辑__init__模块,并将此行作为self.__target的{​​{1}}函数的最后一行: -

class Thread

仍然,我可以看到正在打印的值,并且解释器不会显示任何错误。所以,我试图找到任何可能正在重命名的函数。但是,找不到它。

__init__ threading函数中定义的所有其他变量都会发生这种情况。我想知道像__init__这样的变量是如何重命名为class Thread的。

2 个答案:

答案 0 :(得分:2)

这称为名称修改,每次变量以__

开头时都会发生这种情况

请参阅:http://docs.python.org/release/1.5/tut/node67.htmlhttp://docs.python.org/reference/expressions.html#atom-identifiers

答案 1 :(得分:1)

它内置于Python中。来自the documentation

  

如果在类定义中以文本方式出现的标识符以两个或多个下划线字符开头,并且不以两个或多个下划线结尾,则将其视为该类的私有名称。在为其生成代码之前,将私有名称转换为更长的形式。转换在名称前插入类名,删除前导下划线,并在类名前面插入单个下划线。例如,名为__spam的类中出现的标识符Ham将转换为_Ham__spam