##############################################################################
# Parte del libro Introducción a la programación con Python
# Autor: Nilo Ney Coutinho Menezes
# Editora Novatec (c) 2015 - ISBN 978-85-7522-250-8
# Primera edición - Mayo/2016
# Sitio: http://www.librodepython.com
#
# Archivo: lista\capítulo 11\11.29 - Nuevas clases – lista parcial.py
# Descripción: Nuevas clases – lista parcial
##############################################################################
class DBListaÚnica(ListaÚnica):
def __init__(self, elem_class):
super().__init__(elem_class)
self.borrados = []
def remove(self, elem):
if elem.id is not None:
self.borrados.append(elem.id)
super().remove(elem)
def limpia(self):
self.borrados = []
class DBNome(Nombre):
def __init__(self, nombre, id_=None):
super().__init__(nombre)
self.id = id_
class DBTipoTeléfono(TipoTeléfono):
def __init__(self, id_, tipo):
super().__init__(tipo)
self.id = id_
class DBTeléfono(Teléfono):
def __init__(self, número, tipo=None, id_=None, id_nombre=None):
super().__init__(número, tipo)
self.id = id_
self.id_nombre = id_nombre
class DBTeléfonos(DBListaÚnica):
def __init__(self):
super().__init__(DBTeléfono)
class DBTiposTeléfono(ListaÚnica):
def __init__(self):
super().__init__(DBTipoTeléfono)
class DBDadoAgenda:
def __init__(self, nombre):
self.nombre = nombre
self.teléfonos = DBTeléfonos()
@property
def nombre(self):
return self.__nombre
@nombre.setter
def nombre(self, valor):
if type(valor) != DBNome:
raise TypeError("nombre debe ser una instancia de la clase DBNome")
self.__nombre = valor
def investigaciónTeléfono(self, teléfono):
posición = self.teléfonos.investigación(DBTeléfono(teléfono))
if posición == -1:
return None
else:
return self.teléfonos[posición]