Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

134
Visualizações
¿Por qué necesitamos la biblioteca de clases base abstracta cuando tenemos NotImplementedError?

Aquí hay un uso típico de clases base abstractas en python:

 from abc import ABC class MyBaseClass(ABC): @abstractmethod def __init__(self): print("Here's some logic that I want all subclasses to have") class ChildClass(MyBaseClass): def __init__(self): super().__init__() print("Here's some additional logic that I want this subclass to have")

El comportamiento es el siguiente: no es posible instanciar MyBaseClass , pero es posible crear una subclase, y MyBaseClass incluye la lógica heredada por todas las subclases.

Aquí hay otra forma de obtener este mismo comportamiento:

 class MyBaseClass: def __init__(self): if type(self) == MyBaseClass: raise NotImplementedError print("Here's some logic that I want all subclasses to have") class ChildClass(MyBaseClass): def __init__(self): super().__init__() print("Here's some additional logic that I want this subclass to have")

Por lo que puedo decir, este enfoque tiene exactamente el mismo comportamiento, tiene la misma cantidad de código, es igualmente explícito y usa solo Python nativo. Entonces, ¿qué hace ABC que este enfoque no puede manejar?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Las clases base abstractas le impiden instanciar un objeto a menos que implemente los métodos abstractos. Esto genera el error de inmediato y lo alerta sobre el hecho de que necesita implementar el método. Esto es especialmente útil si crea una instancia de la clase pero no llama al método hasta después de un largo proceso de ejecución: no generará NotImplementedError hasta que llame al método.

 import abc class AbstractClass(abc.ABC): @abc.abstractmethod def test(self): pass class NotAbstractClass: def test(self): raise NotImplementedError() class AbstractInheritor(AbstractClass): pass class NotAbstractInheritor(NotAbstractClass): pass x = AbstractInheritor() # raises error immediately y = NotAbstractInheritor() # no error despite not implementing test

De hecho, mi verificador de tipos captura la línea donde creo x , por lo que ni siquiera necesito ejecutar el código para saber que hay un problema. Mientras tanto, y está perfectamente bien.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda