python – ¿Es convencional generar un NotImplementedError para métodos cuya implementación está pendiente, pero que no se planea que sean abstractos?

Pregunta:

Me gusta generar un NotImplementedError para cualquier método que quiera implementar, pero donde aún no he podido hacerlo. Puede que ya tenga una implementación parcial, pero anteponerla con raise NotImplementedError() porque todavía no me gusta. Por otro lado, también me gusta ceñirme a las convenciones, porque esto facilitará que otras personas mantengan mi código, y las convenciones pueden existir por una buena razón.

Sin embargo, la documentación de Pythons para NotImplementedError dice:

Esta excepción se deriva de RuntimeError. En las clases base definidas por el usuario, los métodos abstractos deben generar esta excepción cuando requieren clases derivadas para anular el método.

Ese es un caso de uso formal mucho más específico que el que describo. ¿Es un buen estilo convencional generar un NotImplementedError simplemente para indicar que esta parte de la API es un trabajo en progreso? Si no es así, ¿hay alguna forma estandarizada diferente de indicar esto?

Respuesta:

Vale la pena señalar que, si bien la documentación de Python proporciona un caso de uso (y probablemente el canónico) para esta excepción, no excluye específicamente su uso en otros escenarios.

Consideraría apropiado generar una excepción NotImplementedError si aún no ha anulado un método en una clase base (para satisfacer la "interfaz").

Una verificación superficial en Google sugiere que la gente entenderá lo que quiere decir si usa la excepción de esta manera. No hay efectos secundarios o consecuencias no deseadas que yo sepa; el método simplemente arrojará una excepción si se llama, y ​​arrojará una excepción que todos entienden bien.


La documentación de Python 3 refleja este uso exacto:

En las clases base definidas por el usuario, los métodos abstractos deben generar esta excepción cuando requieren clases derivadas para anular el método, o mientras la clase se está desarrollando para indicar que aún es necesario agregar la implementación real . [Énfasis añadido]

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım