我正在浏览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
的。
答案 0 :(得分:2)
这称为名称修改,每次变量以__
请参阅:http://docs.python.org/release/1.5/tut/node67.html和http://docs.python.org/reference/expressions.html#atom-identifiers
答案 1 :(得分:1)
它内置于Python中。来自the documentation:
如果在类定义中以文本方式出现的标识符以两个或多个下划线字符开头,并且不以两个或多个下划线结尾,则将其视为该类的私有名称。在为其生成代码之前,将私有名称转换为更长的形式。转换在名称前插入类名,删除前导下划线,并在类名前面插入单个下划线。例如,名为
__spam
的类中出现的标识符Ham
将转换为_Ham__spam
。