2010-02-04 10 views
15

Cada objeto que conozco en Python puede hacerse cargo de su inicialización clase base llamando:¿Por qué no super (Thread, self) .__ init __() trabaja para una subclase threading.Thread?

super(BaseClass, self).__init__() 

Este no parece ser el caso de una subclase de threading.Thread, ya que si intento esto en SubClass.__init__(), Obtengo:

RuntimeError: thread.__init__() not called 

¿Qué causa este error? Miré la fuente para threading.Thread y parece que el método __init__ debe establecer Thread.__initialized = True. Veo que todos los ejemplos se utiliza la siguiente __init__:

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

Pero por qué?

Respuesta

40

Esto funciona bien:

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

creo fallo de su código es que estás pasando la base clase , en lugar de la actual clase , a super - es decir, que está llamando super(threading.Thread, ... y eso está mal. Es difícil de decir, ya que no muestra el código que falla, pero eso es lo que infiero oblicuamente del lenguaje que está utilizando! -)

+0

Creo que ha inferido correctamente –

+0

Hola, sí, tienes razón. Doh! Gracias. –

+0

Eso fue perspicaz. +1. –

Cuestiones relacionadas