Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

120
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!