2011-01-20 9 views
16

En Java, esta pregunta es fácil (aunque un poco tediosa): cada clase requiere su propio archivo. Entonces, la cantidad de archivos .java en un proyecto es la cantidad de clases (sin contar las clases anónimas/anidadas).¿Cuándo se debe dividir una secuencia de comandos de Python en múltiples archivos/módulos?

En Python, sin embargo, puedo definir múltiples clases en el mismo archivo, y no estoy muy seguro de cómo encontrar el punto en el que dividí las cosas. Parece incorrecto crear un archivo para cada clase, pero también se siente mal simplemente dejar todo en el mismo archivo de forma predeterminada. ¿Cómo sé dónde romper un programa?

+1

Buena pregunta, me he estado preguntando sobre esto también. Agregué un par de etiquetas. – Colin

Respuesta

15

Recuerda que en Python, un archivo es un módulo que probablemente importarás para utilizar las clases contenidas en él. Recuerde también uno de los principios básicos del desarrollo de software "the unit of packaging is the unit of reuse", que básicamente significa:

Si las clases se usan con más probabilidad juntas, o si el uso de una clase lleva a utilizar otra, pertenecen a un paquete común.

2

En Java ... cada clase requiere su propio archivo.

En el otro lado, a veces un archivo Java, también, incluirá enumeraciones o subclases o interfaces, dentro de la clase principal porque están "estrechamente relacionadas".

sin contar las clases anónimas/anidada

clases anónimos no se deben contar, pero creo que el uso de buen gusto de las clases anidadas es una opción muy parecida a la que estás preguntando sobre Python.

(De vez en cuando un archivo Java tendrá dos clases, no anidado, el cual está permitido, pero qué asco no lo hago.)

0

Python en realidad le da la opción para empaquetar el código en la forma que estimen conveniente .

La analogía entre Python y Java es que un archivo, es decir, el archivo .py en Python es equivalente a un paquete en Java, ya que puede contener muchas clases y funciones relacionadas.

Para ver buenos ejemplos, eche un vistazo a los módulos integrados de Python. Simplemente descargue la fuente y compruébelo, la regla de oro que sigo es cuando tiene clases o funciones muy estrechamente acopladas, las mantiene en un solo archivo más las dividas.

2

Como yo lo veo, esta es realmente una pregunta acerca de la reutilización y la abstracción. Si tiene un problema que puede resolver de manera muy general, para que el código resultante sea útil en muchos otros programas, colóquelo en su propio módulo.

Por ejemplo: hace un tiempo escribí un cliente (malo) mpd. Quería que el archivo de configuración y el análisis de opciones fueran fáciles, así que creé una clase que combinara la funcionalidad ConfigParser y optparse de una manera que pensé que era sensata. Necesitaba un par de clases de soporte, así que las puse juntas en un módulo. Nunca uso el cliente, pero he reutilizado el módulo de configuración en otros proyectos.

EDITAR: Además, una respuesta más cínica se me acaba de ocurrir: si solo puedes resolver un problema de una manera realmente fea, oculta la fealdad en un módulo. :)

Cuestiones relacionadas