0

我正在查看适用于 Windows 的 Active python 2.7.2 32 位上的threadingmodule( ) 代码。<Python Home>/lib/threading.py在 的__init__函数中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

这是我调用以下__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

我不明白该变量self._Thread__target没有在__init__函数的任何地方初始化class Thread。但是,如果我在自己的函数中打印此变量,则会显示from函数的__init__实际值。self.__targetclass Thread__init__

另外,我尝试编辑threading模块并将这一行作为__init__函数的最后一行class Thread:-

print 'in init of Thread class in threading: ', self._Thread__target

尽管如此,我仍然可以看到正在打印的值,并且解释器没有向我显示任何错误。所以,我试图找到任何可能进行重命名的函数。但是,找不到。

__init__函数中定义的所有其他变量都会发生这种情况class Thread。我想知道变量之类self.__target的重命名为self._Thread__target.

4

2 回答 2

2

这被称为名称修改它是每次变量以 a 开头时发生的情况__

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

于 2012-10-08T18:03:56.070 回答
1

它内置在 Python 中。从文档中

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

于 2012-10-08T18:05:34.307 回答