2011-03-12 13 views
11

No puedo encontrar mucha ventaja en ellos además del tipo de propósito de la documentación. Python me advertirá si olvido implementar un método que definí en un ABC, pero como no hago referencia a mis objetos por sus interfaces, puedo olvidarme de declarar métodos en sus interfaces y no lo notaré. ¿Es una práctica común utilizar ABC para un comportamiento parecido a una interfaz?¿Es pitónico utilizar interfaces/clases base abstractas?

Respuesta

6

Personalmente, considero que las clases abstractas son más útiles cuando escribo bibliotecas u otro código que interactúa entre un desarrollador y otro.

Una de las ventajas de los lenguajes de tipo estático es que cuando se utiliza el tipo incorrecto, falla antes (a menudo, tan pronto como el tiempo de compilación). Los ABC permiten a Python obtener la misma ventaja con el tipado dinámico.

Si su código de biblioteca escribe un objeto que carece de un método vital, probablemente no fallará hasta que se necesite ese método (lo que podría demorar mucho tiempo o poner los recursos en un estado incoherente, dependiendo de cómo se use). Sin embargo, con el ABC, un método faltante no usa el ABC correcto (y falla una verificación instanceof) o es "validado" por ABC.

Además, los ABC son una excelente manera de documentar interfaces, tanto conceptualmente como, a través de documentos, literalmente.

Cuestiones relacionadas