Sunday, 20 August 2017
Clases y objetos

Objetos, instancias y métodos

  Clases y objetos

Para entender este paradigma primero tenemos que comprender qué es una clase y qué es un objeto. Un objeto es una entidad que agrupa un estado y una funcionalidad relacionadas. El estado del objeto se define a través de variables llamadas atributos, mientras que la funcionalidad se modela a través de funciones a las que se les conoce con el nombre de métodos del objeto.

Un ejemplo de objeto podría ser un coche, en el que tendríamos atributos como la marca, el número de puertas o el tipo de carburante y métodos como arrancar y parar. O bien cualquier otra combinación de atributos y métodos según lo que fuera relevante para nuestro programa.

Una clase, por otro lado, no es más que una plantilla genérica a partir de la cuál instanciar los objetos; plantilla que es la que define qué atributos y métodos tendrán los objetos de esa clase.

CLASES EN PYTHON

La definición de una clase en Py thon consiste en el encabezado y en el cuerpo de la clase. En el encabezado se utiliza la palabra “class” seguida del nombre de la clase y los dos puntos (“:”). Posteriormente viene el cuerpo de la clase, en forma indentada, donde aparecen las definiciones de los atributos y los métodos de la clase.

Las definiciones de clases pueden aparecer en cualquier parte, pero por conveniencia se ubican al inicio de un programa, después del estatutos“import”.

Sintaxis:

La forma más fácil de definir una clase es de la forma:

class nombreClase:

<sentencia-1>

.

.

.

<sentencia-N>

Ejemplo:

class Cesta:

# Recuerde siempre el argumento self

def __init__(self,contenido=None):

self.contenido = contenido or []

def añadir(self,elemento):

self.contenido.append(elemento)

def muestra_me(self):

resultado = ""

for elemento in self.contenido:

resultado = resultado + " " + `elemento`

print "Contiene:"+resultado
 

Importante sobre las clases

1.Todos los métodos (funciones de un objeto) reciben un argumento adicional al principio de la lista de argumentos, que contiene el propio objeto (self). Este argumento, por convención, se suele llamar self (que significa 'uno mismo'), como en el ejemplo.

2.A los métodos se los llama de este modo: objeto.método(arg1,arg2).

3.Alguno nombres de método, como __init__ están predefinidos, y significan cosas especiales. __init__ es el nombre del constructor de la clase, es decir, es la función a la que se llama cuando creas una instancia.

4.Algunos argumentos son opcionales y reciben un valor dado (según lo mencionado antes, en la sección de funciones). Esto se realiza escribiendo la definición así:

def magro(edad=32): ...

Aquí se puede llamar a magro con uno o cero parámetros. Si no se pone ninguno, el parámetro edad tendrá el valor 32.

6.Las comillas invertidas convierten un objeto en su representación como cadena (así que si elemento contiene el número 1, `elemento` es lo mismo que "1" mientras que 'elemento' es una cadena literal).

7.El signo más + se utiliza también para concatenar listas. Las cadenas son sólo listas de caracteres (lo que significa que se puede utilizar indexado, corte y la función len en ellas).

Ningún método o variable miembro es protegido (ni privado, ni nada de eso) en Python.
 

Métodos

Un método es una función que pertenece a un objeto.

Los métodos son como funciones, con dos diferencias:

Se definen dentro de la definición de una clase.

Con ello se hace explícita la relación entre la clase y el método.

La sintaxis para invocar un método es diferente de la sintaxis para invocar

una función. La primera utiliza la notación de punto y la segunda no.

Los métodos se invocan sobre las instancias de las clases.

La función método se declara con un primer argumento explícito que representa

al objeto y que se proporciona implícitamente al llamar a la función.
 

Objetos

Normalmente se define objeto como una instancia de una clase, pero en Python esta definición no es correcta, ya que en hay tipos de datos que no son clases (enteros, listas, ficheros...), sin embargo, todos los tipos de Python comparten algo de semántica común, descrita adecuadamente mediante la palabra “objeto”..

Los objetos tienen individualidad y en Python se pueden asignar varios nombres a un mismo objeto (“generación de alias”, que en algunos aspectos se parecen a los punteros), que cuando el objeto es inmutable no es importante, pero cuando el objeto es mutable y se cambia su estado, se acceda con el nombre que se acceda el objeto esta actualizado (de esta forma también se elimina el tener que traspasar parámetros mediante dos mecanismos).
 

Objetos clase:

Los objetos en Python soportan dos tipos de operaciones:

1.- Referencias a atributos: para acceder a un atributo de un objeto se sigue la sintaxis

estándar de Python (obj.nombre). Los nombres de atributos válidos son todos los nombres

que estaban en el espacio nominal de la clase cuando fue creada la clase.

2.- Instanciación de una clase: para instanciar una clase se sigue la notación de funciones,

es decir, es suficiente con imaginar que la es una llamada a una función que no tiene parámetros

y que devuelve una instancia nueva de la clase.

Así, para la definición de la clase

:

 

class MiClase:

i = 12345

def f(x):

return 'hola, mundo'

MiClase.i y MiClase.f serían referencias a atributos válidas, que devuelven un entero y un objeto método, respectivamente.

Cuando se crea una clase que define un método __init__() al instanciar un objeto de la clase se llama automáticamente al método __init__(). El método __init__ sirve, como sugiere su nombre, para realizar cualquier proceso de inicialización que sea necesario.

Ambitos y espacios nominales:

Un espacio nominal es una correspondencia entre nombres y objetos. Ejemplos de espacios

nominales:

-

Conjunto de nombres internos (funciones y excepciones internas).

- Los nombres globales de un módulo.

Los nombres locales dentro de una llamada a función.

 

#

# Autor : Maldonado Daniel Martin

# e-Mail: danyx@larepaweb.com.ar

# Webs : http://www.larepaweb.com.ar

# http://elcodigok.blogspot.com

#

# Descripcion:

#Programa que a muestra un ejemplo de como se define

#una clase y luego se instancia la misma a traves de un objeto

#y la forma de enviar datos por parametros.

#

 

 

# Definimos la clase Autos

class Autos:

def color(self, color):

print "este es un color : " + color

def ruedas(self, cantidad):

# preguntamos la cantidad de ruedas que obtenemos en el parametro

if (cantidad <= 1):

rta = "tengo " + str(cantidad) + " rueda"

else:

rta = "tengo " + str(cantidad) + " ruedas"

# imprimimos la respuesta

print rta

 

# definimos una funcion principal main al buen estilo de C/C++

def main():

# Instanciamos una clase Auto a un Objeto

traffic = Autos()

 

# Le aplicamos y le enviamos como parámetro el método color

traffic.color("verde")

# Aplicamos y le enviamos como parámetros el m�todo ruedas

traffic.ruedas(4)

# llamamos a la función main

main()

Al correr este programa en Geany generado por Maldonado, se despliega:

este es un color: verde

tengo 4 ruedas

El estudiante debe practicar cambiando este programa y asignarle más características por ejemplo:

indicar cuantas puertas tiene.

Modelo del auto

Número de placa del auto, etc.

Tratar de hacerlo en clase.

El estudiante debe practicar generando más instancias, para ello deberá modificar también el main para que se introduzca la información hacia la instancia de la clase.

Además piense como se haría que se  guardará la información en un archivo externo y la forma de consultarlo.

Otro ejemplo:

 

class Coche:

#""Abstraccion de los objetos coche."""

def __init__(self, gasolina):

self.gasolina = gasolina

print "Tenemos", gasolina, "litros"

def arrancar(self):

if self.gasolina > 0:

print "Arranca"

else:

print "No arranca"

def conducir(self):

if self.gasolina > 0:

self.gasolina -= 1

print "Quedan", self.gasolina, "litros"

else:

print "No se mueve"

luego coloque fuera d ela clase la instrucción: “ mi_coche = Coche(3)”

Al correrlo despliega:

Tenemos 3 litros

prueba agregando:

mi_coche.arrancar()

Verás que se despliega

 

Tenemos 3 litros

Arranca.

Luego agregue la instrucción “mi_coche.conducir()” y se despliega

Tenemos 3 litros

Arranca

Tenemos 2 litros

{backbutton}