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.

Establecer los atributos __init__ basados en los argumentos de __init__

Me gustaría reducir el número de filas en la definición de la clase y crear atributos _init _ que tengan el mismo nombre que los argumentos _init _. ¿Es esto posible?

class Num():
    def __init__(self, arg1, arg2):
        self.arg3 = 'tres'
        # algún tipo de magia aquí

a = Num('uno', 'dos')  # instancia

luego

print(a.arg1)  # uno
print(a.arg2)  # dos
print(a.arg3)  # tres
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible reducir el número de filas en la definición de la clase y crear atributos en __init__ que tengan el mismo nombre que los argumentos de __init__ utilizando la característica **kwargs (argumentos de palabras clave) en Python.

    La siguiente es una forma de hacerlo:

    class Num():
        def __init__(self, **kwargs):
            self.__dict__.update(kwargs)
            self.arg3 = 'three'
    
    a = Num(arg1='one', arg2='two')  # instancia
    

    El código anterior asigna los valores dados como argumentos en la creación de la instancia a sus respectivos atributos. El parámetro **kwargs recopila todos los argumentos de palabras clave pasados y la línea self.__dict__.update(kwargs) establece cada argumento de palabra clave como el atributo de la instancia con el mismo nombre. Por último, el atributo arg3 se establece como 'three'.

    Por lo tanto, la salida de las declaraciones de impresión en el código original será la siguiente:

    print(a.arg1)  # one
    print(a.arg2)  # two
    print(a.arg3)  # three
    

    Por lo tanto, es posible reducir el número de filas en la definición de la clase y crear los atributos __init__ que tienen el mismo nombre que los argumentos de __init__ utilizando la característica **kwargs en Python.

Comments are closed.