1
resposta

Método não implementado... mas para que?

  1. Polimorfismo e arrays 04 Método abstrato 05min

Nesta imagem, acima, iestá o código que eu digitei no Google Colab do abstractMethod que foi passado e aula e foi feito o comentário:

"[01:45] Faltou importar o que eu tenho que importar. Para isso, eu faço from abc import ABCMeta, abstractmethod. Usamos o ABCmeta como uma meta classe, metaclass. É uma configuração que precisamos colocar: class Conta(metaclass=ABCMeta):. O abstractmethod já está no nosso código, mais abaixo."

Fiz o import, mas a execução retornou erro, o que não foi explicado. Não percebi, até o momento, erro de digitação de minha parte. Segue o código:

#ABCMeta 

from abc import abstractmethod 




class Conta(metaclass=ABCMeta): 




  def __init__(self, codigo): 

    self._codigo = codigo 

    self._saldo = 0 



  def deposita(self, valor): 

    self._saldo += valor 

    #raise NotImplementedError 




    @abstractmethod 

    def passa_o_mes(self): 

      pass 



  def __str__(self): 

    return "[>>Codigo {} Saldo {}<<]".format(self._codigo, self._saldo) 

Segue o retorno da execução do código no Google Colab:

NameError                                 Traceback (most recent call last)
<ipython-input-13-c425df9d9c53> in <module>
      2 from abc import abstractmethod
      3 
----> 4 class Conta(metaclass=ABCMeta):
      5 
      6   def __init__(self, codigo):

NameError: name 'ABCMeta' is not defined

Segue o mesmo código fornecido na aula:

from abc import ABCMeta, abstractmethod 




class Conta(metaclass=ABCMeta): 




  def __init__(self, codigo): 

    self.codigo = codigo 

    self.saldo = 0 




  def deposita(self, valor): 

      self._saldo += valor 




    @abstractmethod 

    def passa_o_mes(self): 

      pass 




  def __str__(self): 

    return "[>>Codigo {} Saldo {}<<]".format(self.codigo, self.saldo) 

Em seguida na aula: "[02:15] Agora vou rodar o código, interpretou e vou tentar criar uma conta normal. Já deu erro, porque a classe Conta virou uma classe abstrata. Ela tem um método abstrato e não pode ser instanciada, porque ainda não implementaram todos os métodos abstratos, o método passa_o_mês()."

Aqui é que não entendo, pois no Google Colab o retorno indica que o nome ABCMeta não está definido, minha pegunta: Não está definido no código? Ou porque não está implementado como relatado acima? Por que apenas apresentar algo que não está implementado? Por que não apresentou algo semelhante (se é que existe) que esteja implementado para comparar?

Segue linnk do Colab para a respectiva aula 03-Polimorfismo_Arrays.ipynb

:) Obrigado.

1 resposta

Olá André, como você está?

Isto está ocorrendo devido à falta de importação do método ABCMeta, que é uma classe definida no módulo abc (que significa "Abstract Base Classes" ou Classes Base Abstratas, em português). Ela é usada para definir classes abstratas, que são classes que não podem ser instanciadas diretamente, mas que servem como base para outras classes que implementam seus métodos abstratos.

Dito isso, para corrigir o erro apresentado, insira a seguinte importação na célula onde é feito o uso da classe ABCMeta — o instrutor apresenta esta instrução no tempo 1:56 da aula Método Abstrato:

from abc import ABCMeta, abstractmethod

Após isso, execute novamente o código e verifique se obterá êxito.

Espero ter ajudado. Em caso de dúvidas estou à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!