2015-05-12 119 views
2

我有一個小問題。這段代碼是否意味着:「每當類MyThread的實例創建時,初始化threading.Thread構造函數並將傳遞的參數分配給MyThread類中的變量」。本質上,這個類所做的是創建一個threading.Thread類的實例,並添加一些自定義功能,如新變量。對?Python。我是否正確理解代碼?

class MyThread(threading.Thread): 
     def __init__(self, func, args, name=''): 
     threading.Thread.__init__(self) 
     self.name = name 
     self.func = func 
     self.args = args 

如果我是正確的,這段代碼

class MyThread(threading.Thread): 
      def __init__(self): 
      threading.Thread.__init__(self) 

簡單地創建threading.Thread類的一個實例,其實同樣可以通過簡單地把a = threading.Thread()來完成。正確?

+0

'MyThread'是'threading.Thread'的子類。它不會創建另一個實例,它只是調用父類的構造函數。 – Barmar

+0

但是不調用構造函數意味着實際創建一個實例? – trollpidor

+0

不,因爲它傳遞了'self',所以它初始化我們正在初始化的實例。 – Barmar

回答

1

是的。

class MyCls(BaseCls): 
    def __init__(self): 
     BaseCls.__init__(self) 

相同

class MyCls(BaseCls): 
    pass # constructor not overriden 

BaseCls構造函數會在兩種情況下創建MyCls對象時被調用。

MyCls(當「空」)和BaseCls仍然是不同的東西,會有一些差異,如果例如BaseCls使用__slots__

0

該部分代碼未創建threading.Thread的實例。該代碼聲明的類是threading.Thread()的子類(或專業化),即當您創建MyThread的實例時,它將是threading.Thread本身。 threading.Thread.__init__(self)只是通過調用該類構造函數將類實例初始化爲threading.Thread,這通常在使用新樣式類時使用super(MyThread, self).__init__()完成。

a = threading.Thread()只是創建Thread類的一個實例,僅此而已。