Python R2


Herencia en python

Posted in Python por Arturo Elias Antón en 26 agosto 2008
Tags: , , , ,

La herencia es un recurso de los lenguajes de programación para definir una nueva clase de objetos como una extensión de clases previamente definidas. La nueva clase hereda los métodos y propiedades de la clase anterior.
Mediante la herencia podremos tener una mejor especificación de nuestros objetos, partiendo de objetos básicos. Cuanto más básicos sea el objeto más abstracto será. Por este motivo al proceso de subir por el árbol de objetos se lo llama abstracción y al proceso de bajar por el árbol de objetos se lo llama especificación.

                     ---------
                     |persona|
                     ---------
			 |
	     --------------------------
	     |			      |
	 ----------                ---------
         |empleado|                |cliente|
	 ----------                ---------
             |
    -------------------
    |                 |
------------      ---------
|secretaria|      |gerente|
------------      ---------

Python permite hacer esto de forma sencilla. Veamoslo en el archivo herencia.py

#!/usr/bin/python
# Nombre de Fichero : herencia.py
class Persona:
    "Clsase base Persona"
    def __init__(self,pNombre,pEdad):
        self.edad = pEdad
        self.nombre = pNombre
    def getNombre(self):
        return self.nombre
    def getEdad(self):
        return self.edad

class Cliente(Persona):
    "Clase cliente que hereda de Persona"
    pass

class Empleado(Persona):
    "Clase Empleado que hereda de Persona"
    def __init__(self,pNombre,pEdad,pSueldo=500):
        Persona.__init__(self,pNombre,pEdad)
        self.sueldo = pSueldo

    def getSueldo(self):
        return self.sueldo

class Secretaria(Empleado):
    "Clase Secretaria que hereda de Empleado"
    def __init__(self,pNombre,pEdad):
        Empleado.__init__(self,pNombre,pEdad,1000)

class Gerente(Empleado):
    "Clase Gerente que hereda de Empleado"
    def __init__(self,pNombre,pEdad):
        Empleado.__init__(self,pNombre,pEdad,5000)

p = Persona("Pedro",35)
c = Cliente("Sandra",27)
g = Gerente("Santiago",53)
s = Secretaria("Lucia",29)
e = Empleado("Diego",20,400)

despues podran jugar con estos objetos en el interprete haciendo por ejemplo:

>>> dir(p)
['__doc__', '__init__', '__module__', 'edad', 'getEdad', 'getNombre',
'nombre']
>>> dir(c)
['__doc__', '__init__', '__module__', 'edad', 'getEdad', 'getNombre',
 'nombre']
>>> dir(g)
['__doc__', '__init__', '__module__', 'edad', 'getEdad', 'getNombre',
'getSueldo', 'nombre', 'sueldo']
>>> dir(s)
['__doc__', '__init__', '__module__', 'edad', 'getEdad', 'getNombre',
'getSueldo', 'nombre', 'sueldo']
>>> dir(e)
['__doc__', '__init__', '__module__', 'edad', 'getEdad', 'getNombre',
'getSueldo', 'nombre', 'sueldo']
>>> g.getSueldo();
5000
>>> s.sueldo
1000
>>> e.getNombre
<bound method Empleado.getNombre of
<__main__.Empleado instance at 0x00C94AF8>>
>>> e.getNombre()
'Diego'
>>> e.sueldo
400

En la próxima entrada veremos la herencia múltiple.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: