tert
Introducción a la Computación
Clase 23
Patricia Borensztejn
Tipos en Python
• Ya vimos que tenemos un conjunto
importante de tipos básicos y compuestos en
Python definidos por el lenguaje.
• Por ejemplo:
– los tipos básicos: enteros, reales, complejos,
booleanos (ver Clase 4)
– Las secuencias: cadenas, listas ( ver clase 11) ,
tuplas (ver clase 14)
–Otros tipos estructurados: diccionarios (clase 14) ,
sets, registros (ver clase 12)
Tipos definidos por el usuario: clases
• Vamos el crear un tipo nuevo: el tipo punto.
• Un punto está definido por sus dos
coordenadas: (x,y)
• Podemos usar uno de los tipos compuestos
existentes, como una tupla o bien una lista.
• Pero tambien podemos crear un nuevo tipo
compuesto también llamado unaclase.
Sentencia class
• La sentencia class es una sentencia compuesta,
que, como toda sentencia compuesta está
formada:
– por una cabecera seguida por los dos puntos y
– un cuerpo o bloque de sentencias
• En el caso de la clase Punto, como no hay
cuerpo, ponemos la sentencia pass que no tiene
ningún efecto.
Instancias o Objetos
• Al crear la clase hemos creado un nuevo tipollamado Punto.
• Para crear un objeto de este nuevo tipo
debemos instanciar la clase.
objeto
constructor
Atributos
• Podemos añadir nuevos datos a la instancia
usando el operador . (punto)
• La variable blanco apunta a un objeto Punto
que contiene dos atributos. Cada atributo
apunta a un número en coma flotante.
Otro ejemplo: rectángulo
• Un rectángulo puede definirse así:
puntoaltura
ancho
• Es decir: el Punto de la esquina superior izquierda, y
sus dimensiones: ancho y altura
Rectángulo
• Es decir:
class Rectangulo
pass
Copia de objetos
class Punto:
pass
class Rectangulo:
pass
caja=Rectangulo()
caja.anchura=100.0
caja.altura=200.0
caja.esquina=Punto()
caja.esquina.x =0.0
caja.esquina.y=0.0
1 print caja
otracaja=caja
2 print otracajaotracaja=Rectangulo()
otracaja.esquina=Punto()
3 print otracaja
4 print caja.esquina
5 print otracaja.esquina
1
2
3
4
5
>>>
Copia con Módulo Copy
• Hay un módulo llamado copy que tiene dos
métodos: copy() y deepcopy(). Los probamos.
1
2
3
4
import copy
b1=copy.copy(caja)
print caja
print caja.esquina
print b1
print b1.esquina
1
2
3
4
•Son distintos objetos pero comparten la
misma referencia al objeto Punto (esquina)
Copia con Módulo Copy: deepcopy()
• Probamos con deepcopy().
1
2
3
4
import copy
b1=copy.deepcopy(caja)
print caja
print caja.esquina
print b1
print b1.esquina
1
2
3
4
• Son distintos objetos, y también es distinto el
objeto interno.
Otro ejemplo
• Definimos una clasellamada Hora:
• Y ahora una función para imprimir la hora:
• Y ahora instanciamos la clase e invocamos la
función:
Otra forma de hacerlo: Métodos
• Python nos permite definir funciones dentro
de la clase: esas funciones se llaman métodos
• Y ahora la invocamos así:
• Hemos convertido a la función en un método
de la clase.
Métodos
• Fijémonos que el método imprimeHora tiene
unparámetro llamado hora, y que al invocar
el método lo hacemos sin el parámetro.
• Es el objeto sobre el que se invoca el método
el parámetro del método.
Métodos: parámetro self
• Por convención, el primer parámetro de todos los
métodos que definamos dentro de una clase, se
llama self.
• Self, hace referencia al objeto (instancia) que
invoca al método.
class Hora:
defimprimeHora(self):
print str(self.horas) + ":" + str(self.minutos) + ":" + str(self.segundos)
Métodos:parámetro self
class Hora:
def imprimeHora(self):
print str(self.horas) + ":" + str(self.minutos) + ":" + str(self.segundos)
def incremento(self, segundos):
self.segundos = segundos + self.segundos
while self.segundos >= 60:
self.segundos = self.segundos - 60
self.minutos = self.minutos + 1
while...
Regístrate para leer el documento completo.