Curso de POO en Python desde cero

¿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.

Programación Fácil YouTube

Suscríbete

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.