Tutorial 8, Últimos detalles de Poo.

Hola a tod@s de nuevo (aunque creo que solo tengo un seguidor), hoy voy a explicar unos cuantos matices mas sobre la programación orientada a objetos, si habéis programado en java os estaréis preguntando...¿en python todas las clases son públicas? pues normalmente si, pero hay una forma de emular el "private" de las clases en java.


En python esta técnica se llama encapsulación, y consiste en que no se puede acceder a los métodos de la clase fuera de ella como lo hemos estado haciendo anteriormente, para ello tan solo se usa dos guiones bajos antes del nombre del método:


class ejemplo():
         def publico(self):
                print "esta funcion es publica"
          def __privado(self):
                print "esta funcion es privada"

Ya esta así de fácil, después de esto, si hacemos un:

ej1=ejemplo()
ej1.publico()

imprimirá en pantalla "esta funcion es publica"

pero si hacemos:

ej1.privado()

nos tirara un error, por que estamos intentando acceder a un método privado de la clase.

Pero se puede acceder a ella mediante un pequeño truco:

ej1._ejemplo__privado()

Ahora también quería hablaros sobre los métodos especiales, ya conocéis __ini__ y __del__ pero hay muchos mas, pongo los mas importantes aparte de los ya dados anteriormente:

__repr__: Es un método especial que se invoca cuando llamamos a repr(instancia). La función repr viene incorporada y devuelve una representación textual de un objeto. Funciona sobre cualquier objeto, no sólo instancias de clases. Ya está familiarizado con repr aunque no lo supiera. En la ventana interactiva, cuando escribe un nombre de variable y pulsa intro, Python usa repr para mostrar su valor. Cree un diccionario d con algunos datos y entonces haga print repr(d) para comprobarlo usted mismo. 

__cmp__: Se invoca cuando compara instancias de clases. En general, puede comparar dos objetos cualquiera de Python usando ==, no sólo instancias de clases. Hay reglas que definen cuándo se consideran iguales dos tipos de datos incorporados; por ejemplo, los diccionarios son iguales cuando tienen todas las mismas claves y valores, y las cadenas son iguales cuando tienen la misma longitud y contienen la misma secuencia de caracteres. Para instancias de clases, podemos definir el método __cmp__ y programar la lógica de la comparación nosotros mismos, y entonces puede usar == para comparar instancias de sus clases y Python invocará a su método especial __cmp__ por usted. 

__len__: se invoca cuando llama a len(instancia). La función incorporada len devuelve la longitud de un objeto. Funciona sobre cualquier objeto del que se pueda pensar razonablemente que tiene longitud. La len de una cadena es su número de caracteres; la len de un diccionario es su número de claves; la len de una lista o tupla es su número de elementos. Para instancias de clases; defina el método __len__ y programe usted mismo el cálculo de la longitud, y luego llame a len(instancia) para que Python invoque a su método especial __len__

__delitem__: se invoca cuando llama a del instancia[clave], que como puede que recuerde es la manera de eliminar elementos individuales de un diccionario Cuando use del sobre una instancia de clase, Python invocará al método especial __delitem__

Bueno chic@s, con esto acabamos con el tutorial de hoy y con la Poo, ya saben que para cualquier duda tienen los comentarios, un abrazo a tod@s y hasta el próximo post, un saludo.



4 comentarios:

Anónimo dijo...

esta bueno tu post lo empece a seguir hoy

Francisco Dominguez Lerma dijo...

Gracias y bienvenido a mi blog, espero que sea de tu agrado.

Tuus dijo...

Mas de un año después de que lo publicaras, sigue siendo muy útil.

Muchas gracias!

Francisco Dominguez Lerma dijo...

De nada Tuss, y bienvenido al blog :)