Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre como iniciar valores para una instancia.

Anuncios

Para entender este concepto vamos a crear primero la siguiente clase:

>>> class Rectangulo:
...     def area(self):
...             return self.lado_a * self.lado_b
... 
>>>
Anuncios

Este es una clase que calcula el area de un rectangulo, probemos de crear primero un objeto y luego ejecutar el metodo area:

>>> r = Rectangulo()
>>> print(r.area())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in area
AttributeError: 'Rectangulo' object has no attribute 'lado_a'
>>>
Anuncios

Como podemos ver nos devolvio un error debido a que no existe o no se inicio los valores de lado_a y lado_b, vamos a hacer lo siguiente:

>>> r.lado_a = 10
>>> r.lado_b = 7
>>> print(r.area())
70
>>>
Anuncios

Al asignar un valor a estos valores cuando ejecutamos al metodo area ahora si nos devolvera un valor porque ahora si existen pero si nosotros queremos iniciar valores sin tener que usar estas lineas, como hacemos? Para ello debemos modificar la clase Rectangulo de la siguiente forma:

>>> class Rectangulo:
...     def __init__(self, lado_a, lado_b):
...             self.lado_a = lado_a
...             self.lado_b = lado_b
...     
...     def area(self):
...             return self.lado_a * self.lado_b
... 
>>>
Anuncios
Anuncios

La modificacion radica en agregar la funcion __init__ que nos permite recibir los valores a iniciar, primero la instancia con la cual trabajaremos (self en accion), luego los valores para el lado_a y lado_b respectivamente, dentro de esta funcion iniciaremos a las variables lado_a y lado_b de la instancia por medio de los valores recibidos, esto en otros lenguajes usualmente es denominado como constructor pero en python esta funcion es denominada como iniciador (initializer) porque existe un constructor el cual es utilizado por medio de __new__ pero de esto hablaremos en otro post, estas funciones usualmente se las llaman magicas porque se ejecutan automaticamente cuando se utiliza las instancias de la clase, por ultimo tenemos el mismo metodo para calcular el area, vamos a crear un nuevo objeto y pasarle la informacion que necesita para iniciarlo:

>>> r1 = Rectangulo(10,4)
Anuncios

En el ejemplo podemos ver como ahora podemos pasar la informacion necesaria para que la nueva funcion pueda recibirla y procesarla a traves de __init__ y nos permite ejecutar nuestra funcion directamente sin necesidad de crear las variables en nuestra instancia, veamos que sucede al ejecutar el metodo:

>>> print(r1.area())
40
>>>
Anuncios

Como podemos ver nuestra funcion ahora se ejecuto correctamente, probemos con un nuevo objeto:

>>> r2 = Rectangulo(7,3)
>>> print(r2.area())
21
>>>
Anuncios

En este caso volvemos a ver como se crea un nuevo objeto, con nuevos valores, el metodo funciona perfectamente y de manera completamente independiente, como se podran dar cuenta el utilizar la funcion __init__ nos permite generar un codigo mucho mas acorde a la filosofia de python dando un codigo mas legible y corto.

Anuncios

En resumen, hoy hemos visto como inicia una instancia, hemos visto a la funcion __init__ como se agrega en la clase, como despues se debe iniciar al momento de crear la instancia, por ultimo vemos como nos permitio tener un codigo mas acorde a la filosofia de python, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.00