2010-02-04 12 views
15

Ogni oggetto che io conosca in Python può prendersi cura di sua inizializzazione classe base chiamando:Perché super (Thread, self) .__ init __() funziona per una sottoclasse di threading.Thread?

super(BaseClass, self).__init__() 

Questo non sembra essere il caso di una sottoclasse di threading.Thread, dal momento che se provo questo nel SubClass.__init__(), Ottengo:

RuntimeError: thread.__init__() not called 

Cosa dà questo errore? Ho guardato la fonte per threading.Thread e sembra che il metodo __init__ dovrebbe impostare Thread.__initialized = True. Vedo che tutti gli esempi si utilizza il seguente __init__:

class YourThread(threading.Thread): 
    def __init__(self, *args): 
     threading.Thread.__init__(self) 
     # whatev else 

Ma perché?

risposta

40

Questo funziona bene:

>>> class MyThread(threading.Thread): 
... def __init__(self): 
...  super(MyThread, self).__init__() 

Penso bug del codice è che si sta passando alla base classe , piuttosto che l'attuale classe di, a super - vale a dire che si sta chiamando super(threading.Thread, ... e questo è solo sbagliato. Difficile da dire visto che non mostri il tuo codice fallito, ma è quello che deduco obliquamente dal linguaggio che stai usando! -)

+0

Penso che tu abbia dedotto correttamente –

+0

Ciao sì hai ragione. Doh! Grazie. –

+0

Questo è stato perspicace. +1. –

Problemi correlati