Exercício 10-15:

Modifique a classe ListaÚnica para sobrescrever o método extend de UserList. extend funciona como o append, mas recebe uma lista como parâmetro. Verifique o tipo de cada elemento na lista antes de adicioná-lo à lista.

Resposta:

##############################################################################
# Parte do livro Introdução à Programação com Python
# Autor: Nilo Ney Coutinho Menezes
# Editora Novatec (c) 2010-2024
# Quarta Edição - Março/2024 - ISBN 978-85-7522-886-9
#
# Site: https://python.nilo.pro.br/
#
# Arquivo: capitulo 10/exercicio-10-15.py
##############################################################################
from collections import UserList
class ListaÚnica(UserList):
    def __init__(self, elem_classe, enumerable=None):
        super().__init__(enumerable)
        self.elem_classe = elem_classe

    def append(self, elem):
        self.verifica_tipo(elem)
        if elem not in self.data:
            super().append(elem)

    def extend(self, iteravel):
        for elem in iteravel:
            self.append(elem)

    def __setitem__(self, posição, elem):
        self.verifica_tipo(elem)
        if elem not in self.data:
            super().__setitem__(posição, elem)

    def verifica_tipo(self, elem):
        if not isinstance(elem, self.elem_classe):
            raise TypeError("Tipo inválido")
Clique aqui para baixar o arquivo