1
resposta

DUVIDA LIST

A duvida abaixo é antiga, porém, tenho a mesma dúvida neste momento. Se algum instrutor puder explicar um pouco mais para tentar me ajudar a tirar esta duvida.


Frederico Campos Souza (71.7k xp, 35 posts) Olá,

Fique na dúvida quanto ao uso do list, porque na aula passada parecia uma ótima ideia, mas nessa aula o seu uso pode ser muito complexo a depender da quantidade de infos que ela herdará e os efeitos inesperados que pode gerar - isso ficou claro. Mas, no final das contas, em que momento seria interessante usar o list? Qual melhor critério para fazer esse julgamento?

Obrigado,

1 resposta

Olá Marllesson,

Você normalmente vai ter mais de uma opção de caminho a seguir e, como sempre, depende muito do cenário qual seria o melhor a seguir. De forma geral não seria recomendado herdar tudo de uma classe sem necessidade, a herança tem muitos benefícios mas temos que ter cuidado ao utilizá-la para não termos muitos comportamentos inesperados ou dependências desconhecidas na nossa classe.

Em situações mais simples, criar uma classe que apenas atua como uma camada extra de acesso à essa classe interna lhe dá mais controle e flexibilidade (mesmo que seja um pouco mais trabalhoso de início), ou seja, uma classe que contém apenas os métodos que precisamos e que dentro desses métodos acessamos os métodos dessa outra classe, que é como o professor faz na última aula. É um pouco confuso mas tem um exemplo abaixo dissso.

Acredito que o primeiro caso onde foi feito com herança foi apenas para demonstrar o poder da herança e o seu funcionamento, e o professor até explica mais sobre o porque não utilizou mais a herança para esse caso específico mais a frente no curso.

Você pode comparar a diferença de uso de herança ou não no exemplo abaixo, onde temos duas classes que guardam apenas valores inteiros:

class SacolaDeInteirosComHeranca(list):

    # Sobrescrevendo o comportamento padrão do append
    def append(self, valor):
        if isinstance(valor, int):
            list.append(self, valor)
        else:
          raise TypeError("O valor a ser inserido precisa ser um inteiro.")


class SacolaDeInteirosSemHeranca:

    def __init__(self):
        self._itens = []

    def adiciona(self, item):
        if isinstance(item, int):
            self._itens.append(item)
        else:
            raise TypeError("O valor a ser inserido precisa ser um inteiro.")

    def get_itens(self):
        return self._itens


x = SacolaDeInteirosComHeranca()
x.append(2)
x.append(3)
x.append(5)
print(x)

y = SacolaDeInteirosSemHeranca()
y.adiciona(2)
y.adiciona(3)
y.adiciona(5)
print(y.get_itens())

Nesse exemplo a herança acaba resultando em um código mais simples, mas apenas isso não significa que é o correto. Mais a frente no curso também é mostrado como melhorar o segundo caso (sem herança) para que não seja necessário esse get_itens.

Espero ter ajudado, qualquer coisa é só falar!