es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo accedo al método de la clase base *args desde el objeto de la clase hija?

Estoy tratando de obtener el método de la clase base *args del objeto de la clase hija. Aquí está el código:

class BaseView():
def __init__(self, *args, **kwargs):
    for key, value in kwargs.items():
        setattr(self, key, value)
class SecondLevelClass(BaseView):
def print_kwargs(self):
    for key, value in self.__dict__.items():
        print(key, value)

    for x in self.args:
        print(x)
some_object = SecondLevelClass('something', name="John", second_name="Keller", age=23, 
                               location='France')

print(vars(some_object))
print(type(some_object))
print(some_object.print_kwargs())

El mensaje de error dice: AttributeError: El objeto 'SecondLevelClass' no tiene el atributo 'args'

¿Cómo puedo obtener los *args que se pasaron a __init__ si quiero imprimirlos?

ACTUALIZACIÓN:
Se actualizó el código con las líneas faltantes.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que la variable args no está siendo asignada al objeto en el método __init__. Para solucionar esto, añade la siguiente línea al método __init__ de SecondLevelClass:

    self.args = args
    

    Entonces, el código actualizado se vería así:

    class BaseView():
    
        def __init__(self, *args, **kwargs):
            for key, value in kwargs.items():
                setattr(self, key, value)
    
    
    class SecondLevelClass(BaseView):
    
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.args = args
    
        def print_kwargs(self):
            for key, value in self.__dict__.items():
                print(key, value)
    
            for x in self.args:
                print(x)
    
    some_object = SecondLevelClass('something', name="John", second_name="Keller", age=23, location='France')
    
    print(vars(some_object))
    print(type(some_object))
    print(some_object.print_kwargs())
    

    Ten en cuenta que también he añadido super().__init__(*args, **kwargs) en el método __init__ de SecondLevelClass para asegurarme de que la clase padre BaseView se inicialice correctamente.

Comments are closed.