Te recomendamos que revises esta resolución en un entorno controlado antes de enviarlo a producción, un saludo.
Solución:
Existen enorme diferencias entre clases y módulos en Python.
Las clases son planos que le permiten crear instancias con attributes y funcionalidad encuadernada. Las clases admiten herencia, metaclases y descriptores.
Los módulos no pueden hacer nada de esto, los módulos son esencialmente instancias singleton de un interno module
clase, y todos sus globales son attributes sobre el module
ejemplo. Puedes manipular esos attributes según sea necesario (agregar, eliminar y actualizar), pero tenga en cuenta que aún forman el espacio de nombres global para todo el código definido en ese módulo.
Desde una perspectiva de Java, las clases no son tan diferentes aquí. Sin embargo, los módulos pueden contener más de una clase; Las funciones y cualquier resultado de cualquier otra expresión de Python también pueden ser globales en un módulo.
Entonces, como una pauta general del estadio de béisbol:
- Utilice clases como planos de objetos que modelen el dominio de su problema.
- Utilice módulos para recopilar funciones en unidades lógicas.
Luego, almacene los datos donde tenga sentido para su aplicación. El estado global va en módulos (y las funciones y clases son igualmente estados globales, cargados al principio). Todo lo demás entra en otras estructuras de datos, incluidas las instancias de clases.
-
Módulo:
Un módulo es un archivo que contiene definiciones y declaraciones de Python.
Como dice el doc.
Entonces, un módulo en Python es simplemente una forma de organizar el código y contiene clases de Python o solo funciones. Si necesita esas clases o funciones en su proyecto, simplemente import
ellos. Por ejemplo, el math
El módulo en Python contiene solo un montón de funciones, y solo llama a las necesarias (math.sin
). Solo eche un vistazo a esta pregunta.
Por otro lado, una clase de Python es algo similar a una clase de Java, solo está estructurada de una manera ligeramente diferente.
¿Puedo asignar valor a una variable en el módulo?
En resumen, sí.
El concepto de module
se refiere a un solo archivo de Python que se puede importar (al importar, tiene acceso a las variables / métodos / clases definidos en ese módulo).
Se discute comúnmente junto con el concepto package
, que es una carpeta con __init__.py
. Un paquete puede contener subpaquetes o módulos y, al mismo tiempo, de manera similar a los módulos, puede definir variables / métodos / clases que se importarán dentro de su __init__.py
.
El propósito de tener módulos / paquetes en Python es similar a tener paquetes en Java: contener y categorizar códigos reutilizables, resolver conflictos de nombres, etc.
Además, Python también tiene una clase incorporada llamada module
, al igual que list
, tuple
, dict
(tenga en cuenta que las clases integradas de Python no siguen la convención de nomenclatura de CapWords debido a razones heredadas). A module
instancia representa el módulo / paquete importado.
Cuando usa el import
declaración para importar un módulo (archivo único de Python) o un paquete (carpeta con __init__.py
), típicamente
1. una nueva instancia de module
se creará la clase
2. las clases / métodos / variables que definió en ese archivo Python importado se agregarán como attributes de esta module
instancia (si es un paquete, serán las clases / métodos / variables definidas en __init__.py
que se agregan).
Por lo tanto, dado que es solo una instancia de module
clase, puede asignar un valor a la attribute de esa instancia y otras operaciones de instancia de clase.
import math
print(type([1,2,3]))
print(type(math))
print(dir([1,2,3]))
print(dir(math))
consola:
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
Te mostramos reseñas y puntuaciones
Si te ha resultado de ayuda nuestro post, sería de mucha ayuda si lo compartes con más seniors y nos ayudes a difundir este contenido.