Usuario:Lmorillas/modulo programacion/python/intro clases

¿Qué son?

 * Un objeto es una entidad que agrupa un estado y una funcionalidad relacionadas.
 * En Python un objeto es un conjunto de atributos
 * Una clase permite crear nuevos objetos que comparten los mismos atributos
 * Muy importantes para optimizar/reutilizar mejor el código

En Python todo son objetos

Y todo objeto tiene una clase.

self
Explícitamente hay que usar el self al definir las clases en Python. Se refiere a la instancia concreta del objeto. Aparecerá como primer parámetro en la definición de los métodos. Pero no se usa al llamar a las clases o a los métodos. De forma automática, Python pasa la instancia del objeto.

Clase = función

 * Al ejecutar clase se produce un nuevo valor.
 * El objeto tiene los mismos atributos que la clase salvo el operador
 * Inicializa el objeto con el método __init__
 * Le pasa objeto + parámetros a la clase.

Un método es una función asociada a un objeto
Ejemplo: self._atributo
 * Primer parametro es la instancia.
 * self por convención
 * Todas las clases heredan de object
 * Los atributos pueden añadirse, borrarse, modificarse, en cualquier momento
 * En Python todo es público
 * Por convención, lo privado empieza por _
 * ¡Python no es Java!: No "setters" y "getters"

Método __init__
Es un método opcional. Se usará cuando hay que inicializar datos.

Herencia

 * Si el padre necesitaba parámetros, hay que llamar a su método __init__

Métodos estáticos
En Python los métodos estáticos se usan mucho menos que en Java porque se pueden crear funciones estándar en los módulos. En java un método estático y un método de clase son lo mismo. En Python no. Supón que a es una función definida en la clase Madre. Cuando una clase hija hereda: Es decir: Salida: Hemos creado 3 objetos. Soy el objeto Segundo de 3 objetos.
 * Si a es un @staticmethod, Hija.a se refiere a la definición de la clase Madre.
 * Si a es un @classmethod, Hija.a apunta a la definición de la subclase.
 * @staticmethod es una función definida dentro de una clase. Se puede llamar sin haber instanciado la clase antes. Su definición es inmutable por herencia.
 * @classmethod es una función que a la que se puede llamar sin instanciar la clase, pero su definición sigue la subclase, no a la clase madre via herencia. Por eso su primer argumento es cls (class).

Ejemplo de uso:

Más ejercicios
Ejercicios clases y poo