2010-08-25 17 views
9

Tengo una clase en un módulo que tiene algunos métodos estáticos. Un par de estos métodos estáticos solo hacen verificaciones de CRC y esas cosas, y no son realmente útiles fuera de la clase (solo los convertiría en métodos estáticos privados en Java o C++). Me pregunto si debería convertirlas en funciones globales de clase (fuera de la clase).Método estático vs función de módulo en python

¿Hay algún beneficio para hacerlo de cualquier manera? La clase está siendo importada por from module import class así que no estoy preocupado por tener esos módulos también. ¿Pero debería simplemente hacerlos métodos de clase para que from module import * sea más seguro o algo así?

Respuesta

7

La prefijación de los nombres de las funciones con un solo guión bajo es una convención para decir que son privados, y también evitará que se importen con un from module import *.

Otra técnica es especificar una lista __all__ en el módulo - esto sólo puede hacerse en el propio módulo (no es necesario un archivo __init__.py)

__all__ = ['my_class_name'] 

Esto es más de un enfoque de lista blanca, para que pueda tener control total sobre lo que se importa sin usar guiones bajos principales.

Así que a menos que sus métodos lógicamente pertenezcan a la clase, y de su descripción no lo hagan, los dejaría como funciones de nivel de módulo y usaría uno de estos dos enfoques para hacerlos privados.

+0

No sabía nada sobre '__all__'. Gracias =] – Falmarri

3

Haz que funcionen a nivel de módulo y póntelas a un solo guión bajo para que los consumidores entiendan que son para uso privado.

3

Si no son útiles fuera de la clase, ¿cuál es la motivación para convertirlos en métodos de módulo? Mantenerlos como método estático hace que el espacio del nombre sea más limpio.

La única ventaja de moverlo al exterior tal vez para que las personas puedan hacer referencia a ellos sin utilizarlos calificó el nombre de clase. Supongamos que tiene un método de registro que obtuvo referencias en una tonelada de lugares, esto puede tener sentido como una opción estilística.

Cuestiones relacionadas