Al leer el código de OpenStack y me encontré con esto.¿Qué hace el método __init __() del objeto en python?
Una clase llamada 'Servicio' hereda el 'objeto' de la clase base, y luego en el método __init__()
del Servicio, se llama al objeto __init__
. El código relacionado es el siguiente:
la definición de clase:
class Service(object):
y definición del método init del servicio:
def __init__(self, host, binary, topic, manager, report_interval=None,
periodic_interval=None, *args, **kwargs):
y una llamada a super (el 'objeto' aquí) en el inicio del servicio :
super(Service, self).__init__(*args, **kwargs)
no entiendo la última llamada, object.__init__()
lo que lo hace real ¿Lo hago? ¿Alguien puede ayudar?
la referencia [Súper Considerado Súper de Python] (http://rhettinger.wordpress.com/2011/05/26/super-considered-super/) ayuda mucho. ¡Gracias! –
El constructor 'ColoredService' permite, p. 'foo = 'bar'' para pasar, pero esto finalmente fallará con' TypeError: object .__ init __() no toma parámetros'. Entonces, ¿qué sentido tiene pasar '* args' y' ** kwargs' en las llamadas 'super' para las clases' Service' y 'Color'? Su ejemplo funcionará igual sin ellos (y será más robusto). – ekhumoro
@ekhumoro Ese comentario debe dirigirse a los escritores de OpenStack. La parte '' * args'' era de su código y los llamantes deben respetar esa firma. Acabo de agregar * Color * y * ColorService * para mostrar cómo el MRO puede encadenar desde * Servicio * a * Color * a * objeto *. –