Curso de Python – OBJETOS

Python Orientado a Objetos

el lenguaje de Python es múltiparadigma, y aún puede usar programación estructurada, o programación orientada a objetos o funcional. 

 La Programación Orientada a Objetos (POO) es un paradigma de programación en el que los conceptos reales asociados con un problema son modelados por clases y objetos, y el programa consiste en una serie de interacciones entre estos objetos.

Clases y Objetos en Python

Para comprender este paradigma, primero debemos comprender qué es una clase y qué es un objeto. Un objeto es una entidad que agrupa estados y funciones relacionados. El estado de un objeto está definido por variables llamadas atributos, pero su funcionalidad está modelada por funciones llamadas métodos de objeto. Algunos ejemplos de objetos 

 son atributos como el fabricante del automóvil, el número de puertas, el tipo de combustible y métodos como el arranque y la parada. U otras combinaciones de atributos y métodos, según lo que sea relevante para su programa.

la clase, por otro lado, es solo una plantilla generica en las que se instancian los objetos. Una plantilla que define los atributos y métodos de los objetos de esta clase.  Volviendo al ejemplo.

en el mundo real tenemos un conjunto de objetos llamados autos que tienen un conjunto de atributos y atributos comunes a los cuales llamaremos clases. Pero mi carro no es igual al carro de mi vecino, pertenece a la misma clase de objetos, pero es un objeto diferente.

En Python, una clase se define con la palabra clave class, seguida del nombre de la clase, dos puntos (:) y  el cuerpo de la clase indentado. Al igual que con las funciones, si la primera línea del cuerpo es una cadena de texto, esta es la cadena de documentación de dicha clase o docstring.

class vehiculo:

      “””Abstraccion de los objetos coche.”””

def __init__(self, combustible):

       self.combustible= combustible

       print “El coche tiene”, combustible, “litros”

def arrancar(self):

        if self.combustible> 0:

              print “Arrancar vehiculo”

     else:

               print “No arrancar vehiculo”

def conducir(self):

    if self.combustible> 0:

     self.combustible = 1

     print “Quedan”, self.combustible, “litros”

            else:

                   print “vehiculo apagado”

Curso Full Stack - Python

Lo primero que notas en el ejemplo anterior es el extraño nombre del método __init__. Este nombre es habitual y no caprichoso. El método __init__ con guiones bajos dobles al principio y al final del nombre se ejecuta inmediatamente después de crear un nuevo objeto apartir de la clase. Este es un proceso llamado nombre de instanciación __init__, como su nombre lo indica, se utiliza para realizar el proceso de inicialización necesario.

Como puede ver, el primer parámetro de __init__ y el resto de los métodos de la clase son siempre self. Esta es una idea inspirada en Modula-3 utilizada para hacer referencia al objeto actual. Este mecanismo es necesario para permitir el acceso a los atributos y métodos del objeto y, por ejemplo, variable local mi_var de un atributo del objeto self.mi_var.

Volviendo al método __init__ de la clase coche, puede ver cómo usar self para asignar el valor especificado por el programador al parámetro de gas al atributo de gas del objeto (self.gas). El parámetro de gas se deshace al final de la función, pero el atributo de gas se conserva (y es accesible) durante la vida útil del objeto. Para crear un objeto,Para la creacion de un objeto se escribiría el nombre de la clase seguido de un parámetro que sea necesario entre paréntesis. Dichos parámetros se pasarán al método __init__, que es el método que se llama al instanciar la clase.

mi_carro = vehiculo(3)vehiculo

cómo al momento de crear nuestro primer objeto pasemos un solo parámetro a __init__,(número 3), cuando la definición de la función establece claramente que desea hacer uso de dos parámetros (self y gasolina). Esto es debido a que Python pasa automaticamente el primer argumento (la referencia al objeto que se crea).

Estando creado el objeto, puede acceder a sus atributos y métodos haciendo uso de la sintaxis objeto.atributo y objeto.metodo():

>>> print mi_coche.gasolina

3

>>> mi_carro.arrancar()

Arrancar vehiculo

>>> mi_coche.conducir()

Quedan 2 litros

>>> mi_carro.conducir()

Quedan 1 litros

>>> mi_carro.conducir()

Quedan 0 litros

>>> mi_carro.conducir()

No se mueve

>>> mi_carro .arrancar()

No arranca

>>> print mi_carro.gasolina

0

Finalmente, en Python, como mencioné varias veces, recuerda que todo es un objeto. Por ejemplo, las cadenas tienen métodos como upper (), que devuelve el texto en mayúsculas, y count (sub), que devuelve la cantidad de veces que se encuentra la cadena sub en el texto.

Herencia en Python

Hay tres conceptos básicos en un lenguaje de programación orientado a objetos. Encapsulación, herencia y polimorfismo.

Hay tres conceptos que son básicos para cualquier lenguaje de programación orientado a objetos: el encapsulamiento, la herencia y el polimorfismo, en un lenguaje inclinado a objetos cuando hacemos que se herede de una subclase a una superclase lo que estamos estamos produciendo es que la subclase contenga los atributos y métodos que tenía la superclase en su totalidad. Sin embargo, la herencia de una clase también se conoce como “extensión de clase”.

Suponga que desea modelar el instrumento de una banda. Luego están las clases de ukelele, clases de batería, clases de violonchelo, etc. Cada una de estas clases tiene un conjunto de atributos y métodos, estos comparten muchos de sus atributos y métodos. Un ejemplo es el método de tocar.

Es más fácil crear un tipo de objeto de instrumento usando atributos y métodos compartidos y decirle a su programa que herede del instrumento porque el ukelele, la batería y el violonchelo son tipos de instrumentos. 

 

 Para indicar que una clase hereda de otra, encierre el nombre de la clase heredera entre paréntesis después del nombre de la clase.

class Instrumento_musical:

def __init__(self, precio):

self.precio = precio

def tocar(self):

print “tocando instrumentos musicales”

def romper(self):

print “tienes que pagar el instrumento”

print “debes”, self.precio, “$$$”

class bateria(Instrumento_musical):

pass

class bateria(Instrumento_musical):

pass

Conviertete en full stack

Dado que Tambor y Ukelele heredan de Instrumento, juntos tienen un método tocar() y un método romper(), y se inicializan al pasar el parámetro de precio. Pero, ¿qué sucederia si desea especificar un nuevo parámetro tipo_cuerda a la hora cuando crea un objeto ukelele?seria suficiente con crear un nuevo método __init__ para la clase ukelele que se ejecuta en lugar del __init__ de Instrumento. Esto es lo que se denomina sobreescribir métodos.

Ahora es posible que deba sobreescribir el método de la clase principal, pero este método ejecuta el método de la clase principal porque el nuevo método solo necesita ejecutar algunas declaraciones adicionales nuevas. En este caso, utilice la sintaxis SuperClass.metodo(self, args) para llamar al método de  la clase principal con el mismo nombre. Por ejemplo, para llamar a un instrumento desde el método __init__ de ukelele, use Instrument .__ init __ (self, precie).

 

Tenga en cuenta que en este caso debe especificar el parámetro self.

Deja un comentario

Tu dirección de correo electrónico no será publicada.