Usuario:Lmorillas/intropyaytozgz/inmersionpython2

Excepciones
Más complejo:

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

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

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"

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:

Instalar módulos de terceros
http://docs.python.org/install/index.html

Método habitual
En linux puedes usar el sistema de paquetes de la distribución o instalar de la fuente del programa. Para instalar de la fuente: $ python setup.py install Esto instala el paquete para todo el python general que estamos usando. Necesitas permisos de administrador. Si el paquete tiene extensiones en C necesitas un compilador de C y las librerías de desarrollo de Python (algunas distros de linux instalan aparte python-dev) Algunos paquetes necesitan setuptools: descarga http://peak.telecommunity.com/dist/ez_setup.py y ejecuta el archivo.
 * Descarga la fuente (archivo comprimido o desde un sistema de gestión de código: mercurial, git, subversion ...)
 * Colócate dentro del directorio del paquete. Comprueba las dependencias (fichero README)
 * Ejecuta dentro:

Instalar con easy_install o pip
$ easy_install $ pip install Si pip no está instalado: $ easy_install pip

Uso de Virtualenv
Si no interesa instalar el módulo para todo el python (un servidor, probar varias versiones de un producto, permisos locales, etc) usamos virtualenv:

Instalar virtualenv

 * Descargar e instalar de http://pypi.python.org/pypi/virtualenv
 * o usar el sistema de paquetes de la distro.

Crear entorno
Se puede crear entorno limpio: $ virtualenv --no-site-packages proyectocool o usando los paquetes ya instalados en el sistema: $ virtualenv proyectocool Para activar el entorno $ source proyectocool/bin/activate (proyectocool) $ Para desactivar el entorno $ deactivate Ahora cuando está activado el entorno todo lo que instalamos con easy_install, pip o python setup.py se instala en el entorno virtual.