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:
esta bueno tu post lo empece a seguir hoy
Gracias y bienvenido a mi blog, espero que sea de tu agrado.
Mas de un año después de que lo publicaras, sigue siendo muy útil.
Muchas gracias!
De nada Tuss, y bienvenido al blog :)
Publicar un comentario