2012-03-23 37 views
18

Estoy un poco confundido acerca de cómo se pasan los argumentos entre las Subclases y las Superclases en Python. Considere la siguiente estructura de clases:Subclase - Argumentos de la Superclase

class Superclass(object): 
    def __init__(self, arg1, arg2, arg3): 
     #Inilitize some variables 
     #Call some methods 

class Subclass(Superclass): 
    def __init__(self): 
     super(Subclass, self).__init__() 
     #Call a subclass only method 

Dónde estoy teniendo problemas es entender cómo se pasan argumentos entre la superclase y subclase. ¿Es necesario volver a enumerar todos los argumentos de Superclase en el inicializador de Subclase? ¿Dónde se especificarían los argumentos nuevos, Subclase único? Cuando trato de usar el código de arriba para instanciar una Subclase, solo espera 1 argumento, no el 4 original (incluido yo) que enumeré.

TypeError: __init__() takes exactly 1 argument (4 given) 
+1

Tenga en cuenta que 'toma exactamente 1 argumento 'podría ser confuso, porque ese argumento es' self' (que se pasa automáticamente). – katrielalex

Respuesta

17

¡No hay magia! __init__ métodos funcionan como todos los demás. Necesita tomar explícitamente todos los argumentos que necesita en el inicializador de la subclase y pasarlos a la superclase.

class Superclass(object): 
    def __init__(self, arg1, arg2, arg3): 
     #Initialise some variables 
     #Call some methods 

class Subclass(Superclass): 
    def __init__(self, subclass_arg1, *args, **kwargs): 
     super(Subclass, self).__init__(*args, **kwargs) 
     #Call a subclass only method 

Cuando se llama a Subclass(arg1, arg2, arg3) Python simplemente llamar Subclass.__init__(<the instance>, arg1, arg2, arg3). No intentará mágicamente hacer coincidir algunos de los argumentos con la superclase y algunos con la subclase.

Cuestiones relacionadas