En python, ¿se considera mejor definir un módulo con funciones o un módulo con una clase que contenga funciones? [cerrado]

13

En mi código, cualquiera de las dos opciones anteriores funcionaría igual de bien, pero estoy interesado en conocer las ventajas y desventajas de ambos enfoques.

TK100
fuente

Respuestas:

9

Honestamente depende de tus necesidades. La mayoría de las veces un módulo de funciones será lo que estás buscando.

Las clases de Python (imho) no deberían pensarse como clases en C # o C ++ o Java, debe haber una razón lógica para agrupar un conjunto de funciones en un padre mayor, las estructuras de datos serían un buen ejemplo de esto. un conjunto congruente de funciones que se aplican directamente a la clase en lugar de un conjunto de funciones libremente recopiladas que tienen un propósito general.

  • Módulo de funciones: propósito general, utilidad y más funciones "globales"
  • Módulo de clase de funciones: clases agrupadas de necesidades similares, diferentes tipos de datos de listas vinculadas o funciones de procesamiento de audio o diferentes tipos de árbol.

Un módulo es para la agrupación jerárquica general de sistemas similares, generalmente tengo todas las funciones de utilidad en un solo módulo, todos los datos en otro, mi capa de datos y conectores en un módulo de tipo más "padre". Dado que un módulo es solo una agrupación mental, se trata menos de qué tipos de sistemas hay en él (clases o funciones, honestamente probablemente una combinación de los dos) y más sobre las conexiones lógicas entre los sistemas bajo el módulo.

Jeff Langemeier
fuente
66
No entiendo el contraste entre una clase de Python y otros lenguajes. ¿En qué idioma tendrías una clase con funciones que no tienen una razón lógica para agruparse?
Guy Sirton el
7

La pregunta básica es si necesita tener diferentes instancias de su módulo / clase. un módulo de python es como un singleton : siempre se refiere al mismo objeto, es decir, si necesita instancias, necesita una clase.

Sin embargo, si no necesita instancias, es posible que tenga la necesidad de configurar su "objeto" en un estado inicial. Si bien esto es claramente posible con un módulo simple, si la inicialización es más compleja que solo establecer algunos valores, recomendaría tener un código de inicialización en el __init__método de una clase para facilitar la lectura.

kr1
fuente
2
Vale la pena señalar que probablemente está hablando de algo que tiene estado, por ejemplo, un módulo con variables globales versus una clase con variables miembro. si su clase solo tiene métodos pero no tiene estado, hay pocas razones para tener varias instancias
thbusch el
3
@thbusch, sí, esto está implícito en la necesidad de instancias .
kr1
Cuando habló sobre la necesidad de una instancia que me hizo entender módulo vs clase. Como si tuviera que hacer varios autos, una clase sería apropiada frente a un módulo de calculadora donde no necesito hacer un montón de calculadoras, solo necesito usar los métodos de sumar y restar de ese módulo.
tazboy