2012-10-08 15 views
0

我正在通過代碼爲threading模塊(<Python Home>/lib/threading.py)上的Active Python 2.7.2 32位爲Windows。在class Thread__init__功能,存在很多變數定義:線程模塊的__init__中定義的變量如何重命名爲_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 

這裏是我如何打電話的class Thread__init__功能: -

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是在class Thread__init__函數中的任何地方都未初始化。但是,如果我在自己的__init__函數中打印此變量,則會顯示class Thread的函數self.__target的實際值。

另外,我嘗試過編輯threading模塊,並把此行的class Thread__init__函數的最後一行: -

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

不過,我可以看到正在打印的價值和解釋不會顯示任何錯誤。所以,我試圖找到可能正在進行重命名的任何功能。但是,找不到它。

這發生在class Thread__init__函數中定義的所有其他變量。我想知道像self.__target這樣的變量是如何被重命名爲self._Thread__target

回答

1

它建立成Python。從the documentation

當該文本上發生在類定義的標識符開始於兩個或多個下劃線字符,並在兩個或多個下劃線並沒有結束,則認爲類的專用名稱。在爲其生成代碼之前,專用名稱會轉換爲更長的形式。該轉換將名稱前面的類名插入,刪除了前導下劃線,並在類名前插入了一個下劃線。例如,名爲Ham的類中出現的標識符__spam將轉換爲_Ham__spam