2012-03-16 15 views
6

Una docstring python se debe dar como una cadena literal; pero a veces es útil tener docstrings similares para varias funciones (por ejemplo, diferentes constructores), o varios métodos de acceso podrían aceptar la misma lista de argumentos (y luego confiar en el mismo método oculto), por lo que sería bueno usar el mismo descripción en todas partes. Para tales casos, puedo construir una docstring asignándola al __doc__, lo cual hago por medio de un simple decorador. El sistema funciona muy bien (en python 2), y estoy satisfecho con lo simple, claro y bien encapsulado que es.Modificar un docstring python con un decorador: ¿Es una buena idea?

La pregunta: ¿Es esta una buena idea? En particular, hay herramientas que se confundirían con esta configuración (por ejemplo, cualquier cosa que extraiga las cadenas de documentos de la fuente en lugar de hacerlo desde el bytecode). ¿La solución seguirá funcionando en Python 3? ¿Hay otros motivos o circunstancias que lo hagan desaconsejable?

+0

"diferentes constructores"? Supongo que te refieres a algún tipo de funciones de fábrica, porque solo puedes tener un '__init__'. –

+0

No creo que la "función de fábrica" ​​sea correcta. Me refería a los miembros estáticos de una clase, que crean una instancia de la misma clase. Todos serían constructores polimórficos en un lenguaje que lo respalde directamente. Pero sí, las funciones de fábrica pueden ser otro caso de uso. – alexis

+0

Los consideraría una especie de fábrica, sí. No existe realmente ninguna diferencia entre las funciones miembro estáticas y las funciones gratuitas (para usar la terminología C++), además del espacio de nombres. Aunque Python tiene conceptos separados de "método de clase" y "método estático". –

Respuesta

4

No debe romper ninguna herramienta y que debería funcionar en Python 3.

Está bien si no se pierde nada, es decir un código fuente legibilidad, todavía se puede averiguar lo que hace la función y la forma de utilizar eso.

El problema podría ser que enmascara un diseño deficiente. Si varios métodos utilizan la misma lista de argumentos, el código se debe refactorizar (crear un objeto que funcione con la lista) en lugar de parchear mediante la generación de documentos repetitivos.

+0

¡Gracias! Es bueno escuchar Creo que el diseño está bien: todos los métodos llaman el mismo método de implementación y hacen cosas como devolver resultados de búsqueda (del contenido del objeto) en diferentes formatos. Es bueno tener los diferentes nombres en la interfaz para diferentes operaciones, y de todos modos hay una API existente con nombres estandarizados. Acerca de las cadenas de documentación, es bastante fácil observar el método de implementación al leer el código fuente. Para ayuda interactiva, sin embargo, los métodos de interfaz deben documentarse. – alexis

+0

Volvió a abrir la pregunta porque espero escuchar más comentarios al respecto. Sin ánimo de ofender! – alexis

Cuestiones relacionadas