1
resposta

Solução do Desafio: refatorando nossa classe não está funcionando

Código do Script de fusão
Classe Dados com o @classmethod
Erro no terminal

1 resposta

Tudo bem, Pedro?

Quando você chama cls.leitura_csv(path), o Python tenta passar o próprio cls como o parâmetro self da função leitura_csv, mas ela está esperando um objeto já instanciado. Por isso o erro “Dados object has no attribute '_Dadosget_columns'”.

Uma sugestão é transformar também as funções de leitura em métodos privados da classe (com cls em vez de self):

@classmethod
def __leitura_csv(cls, path):
    dados_csv = []
    with open(path, 'r') as file:
        spamreader = csv.DictReader(file, delimiter=',')
        for row in spamreader:
            dados_csv.append(row)
    return dados_csv

@classmethod  
def __leitura_json(cls, path):
    with open(path, 'r') as file:
        dados_json = json.load(file)
    return dados_json

E aí seu classmethod leitura_dados fica exatamente assim:

@classmethod
def leitura_dados(cls, path, tipo_dados):
    dados = []
    if tipo_dados == 'csv':
        dados = cls.__leitura_csv(path)
    elif tipo_dados == 'json':
        dados = cls.__leitura_json(path)
    return cls(dados)

Espero ter ajudado e qualquer dúvida, compartilhe no fórum.

Até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado!