2010-02-04 6 views
15

Jedes Objekt, das ich von in Python kenne, kann von seiner Basisklasse Initialisierung kümmert durch den Aufruf:Warum funktioniert super (Thread, self) .__ init __() nicht für eine threading.Thread-Unterklasse?

super(BaseClass, self).__init__() 

Dies scheint nicht der Fall mit einer Unterklasse von threading.Thread zu sein, da, wenn ich versuche, diese in SubClass.__init__(), Ich bekomme:

RuntimeError: thread.__init__() not called 

Was gibt diesen Fehler? Ich schaute auf die Quelle für threading.Thread und es sieht so aus __init__ Methode sollte Thread.__initialized = True eingestellt werden. Ich sehe, dass alle Beispiele verwenden Sie die folgende __init__:

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

Aber warum?

Antwort

40

Das funktioniert gut: statt der aktuellen Klasse, zu super

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

Ich denke Fehler Ihres Codes ist, dass Sie die Basis Klasse vorbei sind - dh Sie anrufen super(threading.Thread, ... und das ist einfach falsch. Schwer zu sagen, da Sie nicht Ihren fehlerhaften Code zeigen, aber das ist, was ich schräg aus der Sprache, die Sie verwenden, ableiten! -)

+0

Ich denke, Sie haben richtig abgeleitet –

+0

Hallo ja, Sie haben Recht. Do! Vielen Dank. –

+0

Das war aufschlussreich. +1. –

Verwandte Themen