2012-10-03 33 views
21

He creado una clase base:cómo extender Python init clase

class Thing(): 
    def __init__(self, name): 
     self.name = name 

quiero extender la clase y añadir a la método init por lo que el que SubThing tiene tanto un name y una propiedad time. ¿Cómo lo hago?

class SubThing(Thing): 
    # something here to extend the init and add a "time" property 

    def __repr__(self): 
     return '<%s %s>' % (self.name, self.time) 

Cualquier ayuda sería increíble.

Respuesta

27

Sólo puede definir __init__ en la subclase y llame super llamar __init__ métodos de los padres apropiadamente:

class SubThing(Thing): 
    def __init__(self, *args, **kwargs): 
     super(SubThing, self).__init__(*args, **kwargs) 
     self.time = datetime.now() 

Asegúrese de tener su subclase de la clase base de object aunque, como super no funcionará con las clases antiguas:

class Thing(object): 
    ... 
+14

Además, en lugar de hacer referencia a 'SubThing' en' super', puedes hacer 'super (self .__ class__, self) .__ init __ (* args, ** kwargs)'. Esto también funciona con clases creadas dinámicamente usando 'type()'. – miki725

+3

Obtengo este error con cualquiera de esas soluciones: 'TypeError: debe ser type, not classobj' - el error se desencadena por mi superlínea. – TheChymera

+1

@TheChymera mira lo que escribió Jesse: "Asegúrate de tener tu subclase de clase base desde el objeto, ya que super no funcionará con clases antiguas" – Acsisr

Cuestiones relacionadas