
¿Cómo funciona *args en clases de Python?
Capítulo 5: Utilización de *args en las clases - POO Python
Continuamos con el curso viendo los atributos de clase, las diferencias entre un método y una función y finalmente los argumentos arbitrarios con *args.
Empecemos viendo alguna diferencia entre los atributos especificados fuera del __init__ y dentro, ya que creo que es un tema que causa confusión.
Los atributos del __init__ ya sabes que sirven para darle un valor inicial a un objeto, esto no quiere decir que no se puedan poner otros atributos que no se asignen obligatoriamente, tal y como puedes ver en el siguiente ejemplo.
class Usuarios:
tipo_usuario = "Free"
publicidad = True
def __init__(self, nid, alias, nombre, apellidos):
self.nid = nid
self.alias = alias
self.nombre = nombre
self.apellidos = apellidos
Pero, ¿qué diferencia puede haber entre poner algo dentro del __init__ y fuera de él?
A los atributos de fuera (tipo_usuario y publicidad), les doy un valor en la clase, este no cambia al crear el objeto. Es decir, yo le puedo dar al objeto un nid, un alias, un nombre y apellidos al instanciarlo, pero no puedo cambiar los valores de tipo_usuario y publicidad, al menos durante la creación del objeto.
Si imprimes por ejemplo, usuario1.tipo_usuario (de un supuesto objeto llamado usuario1) devuelve el True aunque no se lo hayas especificado en la creación del objeto, ya lo lleva de por sí.
Por supuesto, estos atributos de fuera del __init__ no están marcados a fuego, los puedes cambiar perfectamente después de la instanciación.
usuario1 = Usuarios ("001", "PdePython", "Paula", "Bravo Rojas")
print(usuario1.tipo_usuario)
usuario1.tipo_usuario = "Premium"
print(usuario1.tipo_usuario)
Free
Premium
Llamar a atributos de clase Python
Podemos llamar a estos atributos de clase sin necesidad de un objeto de por medio:
print(Usuarios.publicidad)
True
Ya que estamos en un curso desde cero en programación orientada a objetos, no puede faltar que explique la diferencia entre método y función. Lo hice al principio del curso, pero por si no te quedó claro, te lo explico de nuevo.
Un método es lo mismo que una función, solo que el método pertenece a una clase y la función no.
Aclarada la definición de ambos términos podemos deducir si conocemos el uso de *args (argumentos arbitrarios) que en un método podemos utilizar *args.
class Usuarios:
tipo_usuario = "Free"
publicidad = True
def __init__(self, nid, alias, nombre, apellidos, *args):
self.nid = nid
self.alias = alias
self.nombre = nombre
self.apellidos = apellidos
self.args = args
usuario1 = Usuarios ("001", "PdePython", "Paula", "Bravo Rojas", "Persona estudiosa", "Amante del lenguaje de programación Python", "27")
print(usuario1.args)
Como puedes ver, podemos sustituir el argumento *args por tantos argumentos como queramos.
('Persona estudiosa, amante del lenguaje de programación Python', '27')
Comentarios
Si te quedan dudas sobre el temario, sobre Python, o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.