2010-07-03 18 views

Respuesta

11

Herencia me hace pensar en una jerarquía de clasificación Y el orden de los argumentos a super es jerárquica:.. en primer lugar la clase, entonces la instancia

Otra idea, inspirada en la respuesta de ~ unutbu:

class Fubb(object): 
    def __init__(self, *args, **kw): 
     # Crap, I can't remember how super() goes!? 

pasos en la construcción de una correcta super() llamada.

__init__(self, *args, **kw)    # Copy the original method signature. 

super(Fubb).__init__(self, *args, **kw) # Add super(Type). 
        /
       ------- 
      /
super(Fubb, self).__init__(*args, **kw) # Move 'self', but preserve order. 
+0

Oh chico, eso es perfecto. Gracias. –

5

yo no. En Python 3 que se acaba de escribir

super().method(params) 
+1

Interesante. Todavía en Python 2.6 por lo que no he visto esto todavía (aunque no estoy muy seguro en este momento si creo que esto 'se ve' más elegante/correcto) – ChristopheD

+0

Ah, no me había dado cuenta. Interesante, gracias. –

10

Basta con recordar que el self es opcional - super(Type) da acceso a los métodos de la superclase no unidos - y argumentos opcionales siempre en último lugar.

+0

Ah, también es interesante: no me había dado cuenta de eso. –

2

Normalmente, super se usa dentro de una definición class. Allí, (otra vez típicamente), el primer argumento para super siempre debe ser el nombre de class.

class Foo(object): 
    def __init__(self,*args,**kw): 
     super(Foo,self).__init__(*args,**kw) 
Cuestiones relacionadas