Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

122
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda