Clases

Intro

Hoy toca ver las clases.

Una clase, indistintamente del lenguaje de programación, pretende representar un objeto, dicho objeto pertenecerá a un tipo de dato y definirá funciones que trabajan sobre él mismo, así mismo tendrá propiedades, es decir variables y constantes dentro de él que se pueden solicitar para conocer mejor el objeto.

Dicho de otra manera, una Clase es un grupo de funciones y variables que trabajan en conjunto para crear algo lo más homogéneo posible, logrando representar algo de la vida real.

Una de las ventajas que siempre se aclama en cuanto a las clases es poder crear “herencias”, es decir clases derivadas de una o mas clases. De esta forma podemos crear una clase “Base” y generar una serie de clases que comparten algunos metodos/propiedades pero que se diferencian en otras.

Y de que me sirve esto?. Bien, siguiendo el principio de DNRY (Do Not Repeat Yourself) nos ayuda a reducir la cantidad de código que tenemos que escribir.

Definir una clase

Una clase la vamos a definir usando la palabra reservada class seguida por el nombre de la clase, entre paréntesis pondremos las clases padre de nuestra nueva clase. Las clases padre son quienes heredan métodos y propiedades a las clases hijas.

class MiClase(ClasePadre1, ClasePadre2):
    # Código de la clase

En el caso de que no tengamos clases padres solo se usan los paréntesis vacíos.

class MiClase():
    # Código de la clase

Métodos

Dentro de la clase podemos definir métodos, que son a final de cuenta funciones de clase. Se distinguen por que están dentro del bloque del código de la clase y porque siempre, siempre siempre siempre, recibirán la instancia de la clase como primer parámetro. Típicamente nos referimos a la instancia de la clase como self y ese nombre le ponemos al primer parámetro, pero le podríamos poner el que queramos.

class MiClase(ClasePadre1, ClasePadre2):
    def metodo1(self, argumento1, argumento2=None):
        pass

Definir un método es exactamente igual que definir una función, salvo por el detalle del primer argumento que ya mencionamos.

Referencia e Instancia

Para empezar tendremos que comprender que es una instancia. Una Instancia es un objeto derivado de llamar la clase, No es la clase en si, es un objeto que fue creado a partir de la definición de dicha clase, tiene los métodos y propiedades definidas aunque sus valores pueden ser únicos.

Una Referencia de una clase es, como su nombre lo dice, un apuntador a dicha definición de clase. No tiene datos definidos ni esta asociada a ningún objeto, sin embargo, al mandarla a llamar se obtiene un objeto.

Referencia de clase

class MiClase():
    def metodo1(self):
        print "Metodo1"

a = MiClase
print a

__main__.MiClase

b = MiClase()
print b
<__main__.MiClase instance at 0x10d176ab8>

Como podemos ver en el ejemplo, a es una referencia de la clase, porque estamos asignando la el apuntador de la clase a la variable a sin mandar a llamar la clase, por lo que no se genera una instancia, podemos ver que al mandar a “imprimir” el valor de a nos dice el modulo y el nombre de la clase a quien apunta.

En el otro caso: b  si tiene una instancia (nuevo objeto) porque se manda a llamar la clase, incluso, al imprimir dicho objeto nos dice en que espacio de memoria está.

Loading

You must be logged in to take the quiz.