Underc0de

Programación Scripting => Python => Mensaje iniciado por: JaAViEr en Septiembre 27, 2014, 03:27:20 AM

Título: [Python] Utilizando orientación a objetos [2]
Publicado por: JaAViEr en Septiembre 27, 2014, 03:27:20 AM
Heredando Clases
Veamos... La Herencia en Python es de lo más sencillo que puede haber (Si lo comparas con otros lenguajes). Veamos un ejemplo en código:
Código (python) [Seleccionar]

class Clase_A:
 
    def __init__(self):
     
      pass
   
    def funcion_a(self):
       
        print "FUNCION DE CLASE_A"

class Clase_B(Clase_A):
 
  pass

Bien, tenemos "Clase_A", dentro tiene la función "funcion_a", que solo imprime "FUNCION DE CLASE_A".
Para que la Clase "Clase_B" pueda heredar la función "funcion_a"(Originaria de la  Clase_A) debemos añadir entre paréntesis la clase que vamos a heredar:
Código (python) [Seleccionar]

class Clase_B(Clase_A):

Con eso ya le indicamos a Python que Clase_B heredará todo lo que hay en Clase_A, por lo que ahora podemos crear una instancia de Clase_B y llamar a la función funcion_a tranquilamente.

Creemos la instancia para la Clase Clase_B:
Código (python) [Seleccionar]
c=Clase_B()
Ahora podemos acceder a funcion_a (De Clase_A) con nuestra instancia de Clase_B.
Código final:
Código (python) [Seleccionar]

class Clase_A:
 
    def __init__(self):
     
      pass
   
    def funcion_a(self):
       
        print "FUNCION DE CLASE_A"

class Clase_B(Clase_A):
 
  pass

c=Clase_B()
c.funcion_a()

Output:

FUNCION DE CLASE_A

Utilizando variables en Clases
Quise escribir un poco sobre esto porque recuerdo que yo tuve problemas con esto y no lo entendí hasta que le metí manos al código. Así que espero se entienda.

Cuando creamos una Función dentro de una Clase y declaramos alguna variable, esta variable va a ser accesible solo desde la Función en la cuál fue creada, veamos un ejemplo:
Código (python) [Seleccionar]
class Ejemplo:
 
  def funcion_saludo(self, nombre):
   
    print "Hola,", nombre
   
  def funcion_despedida(self):
   
    print "Hasta luego,", nombre

instancia=Ejemplo()
instancia.funcion_saludo("Javier")
instancia.funcion_despedida()

Como te habrás fijado, en la Función funcion_saludo hemos pasado el parámetro "nombre", para luego imprimirlo, pero si queremos acceder a la variable "nombre" desde la Función funcion_despedida nos arrojará un error pues nos dirá que la variable "nombre" no ha sido definida.
Entonces... ¿ Como accedo a esa variable? ¡Es realmente sencillo !

Para que puedas acceder a una variable desde toda una Clase y no solo desde la función donde se definió, debes crear una variable con el prefijo "self.", veamos el caso anterior, pero esta vez con el prefijo "self.nombre":
Código (python) [Seleccionar]
class Ejemplo:
 
  def funcion_saludo(self, nombre):
   
    self.nombre=nombre
    print "Hola,", self.nombre # O print "Hola,", nombre
   
  def funcion_despedida(self):
   
    print "Hasta luego,", self.nombre

instancia=Ejemplo()
instancia.funcion_saludo("Javier")
instancia.funcion_despedida()
'''La Funcion funcion_despedida no necesita
parametro, pues utilizaremos el mismo
valor de la Funcion funcion_saludo.'''

Como puedes ver, hemos declarado que self.nombre=nombre, así podremos acceder a la variable "nombre" de una manera global (gracias a la magia del "self.") a lo largo de nuestra Clase, sin tener que estar pasando parámetros a cada función y re-utilizando datos ya ingresados en otras funciones.

Fuente: http://codigo.ga/python/python-utilizando-orientacion-a-objetos-2/