Clases versus módulos en Python

19

Python tiene muchos módulos (como re) que realizan un conjunto específico de acciones. Puede llamar a las funciones de este módulo y obtener resultados, y el módulo en su conjunto tiene una idea detrás (en este caso, tratar con expresiones regulares).

Las clases parecen hacer casi exactamente lo mismo, pero también parecen usar propiedades bastante más que los módulos.

¿De qué manera los módulos son diferentes a las clases? (Sé que no puedo subclasificar un módulo, pero ¿es eso?) ¿Cuándo debo usar una clase en lugar de un módulo?

Pro Q
fuente
¿Sabe que cuando llama a los métodos del módulo, a veces el módulo simplemente pasa a una instancia de una clase? Ver por ejemplo el randommódulo. reSin embargo, no recuerdo si esto es cierto .
jscs
1
Un concepto relacionado a saber: ¿ Módulo versus paquete?
RBT

Respuestas:

12

Un módulo de Python no es más que un paquete para encapsular código reutilizable. Los módulos generalmente, pero no siempre, residen en una carpeta con un __init__.pyarchivo dentro. Los módulos pueden contener funciones pero también clases. Los módulos se importan usando la importpalabra clave.

Python tiene una manera de poner definiciones en un archivo y usarlas en un script o en una instancia interactiva del intérprete. Tal archivo se llama módulo; Las definiciones de un módulo pueden importarse a otros módulos o al módulo principal.

Obtenga más información sobre los módulos de Python en estos enlaces:

https://docs.python.org/2/tutorial/modules.html (Python 2) https://docs.python.org/3/tutorial/modules.html (Python 3)

Las clases, por otro lado, se pueden definir en el código de su aplicación principal o dentro de los módulos importados por su aplicación. Las clases son el código de la programación orientada a objetos y pueden contener propiedades y métodos.

Obtenga más información sobre las clases de Python en estos enlaces:

https://docs.python.org/2/tutorial/classes.html (Python 2) https://docs.python.org/3/tutorial/classes.html (Python 3)

Eneko Alonso
fuente
3
Entonces, ¿no es malo tener una sola clase en un módulo, incluso si esa clase solo tiene funciones? Siento que, en esa situación, generalmente debería hacer un módulo sin hacer una clase. ¿Existe una regla subyacente sobre cuándo usar clases en lugar de módulos? (Eso es lo que estoy tratando de preguntar ... ¿Debería editar mi pregunta para que quede más clara?)
Pro Q
66
Puede crear varias instancias de una clase, pero no puede crear instancias de un módulo. Puede comparar módulos con clases estáticas o singletons.
Eneko Alonso
1
Los módulos no siempre residen en una carpeta con un __init__.pyarchivo.
multigoodverse
1
@ProQ En lenguajes como Python donde puede tener funciones en módulos en lugar de clases (a diferencia de, por ejemplo, Java), generalmente es una buena forma de mantener las funciones estáticas en el nivel del módulo. Las clases implican instancias con su propio estado.
Turksarama el
-2

Si se trata de un montón de funciones puras, por ejemplo re, las pongo en un módulo. Utilizo una clase cuando sé que hay un estado que quiero mantener con ese código (por ejemplo, un archivo que se lee una vez, pero cuya información es utilizada por varias de las funciones).

Greg Bell
fuente