resueltos - propiedades de clase python
Diferencia entre Módulo y Clase en Python (3)
¿Puedo asignar valor a una variable en el módulo?
En resumen sí.
El concepto de module
refiere a un único archivo de Python que se puede importar (al importar, tiene acceso a las variables / métodos / clases definidas en ese módulo).
Normalmente se discute junto con el package
concepto, que es una carpeta con __init__.py
. Un paquete puede contener subpaquetes o módulos, y al mismo tiempo, similar a los módulos, puede definir variables / métodos / clases para importar 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 incorporadas de Python no siguen la convención de nomenclatura de CapWords debido a razones heredadas). Una instancia de module
representa el módulo / paquete importado.
Cuando usa la declaración de importación para importar un módulo (un solo archivo de Python) o un paquete (carpeta con __init__.py
), normalmente
1. Se creará una nueva instancia de clase de module
2. las clases / métodos / variables que definió en ese archivo Python importado se agregarán como atributos de esta instancia del module
(si es un paquete, se agregarán las clases / métodos / variables definidas en __init__.py
) .
Por lo tanto, dado que es solo una instancia de la clase de module
, puede asignar un valor al atributo de esa instancia y a 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:
<class ''list''>
<class ''module''>
[''__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'']
¿Puedo asignar valor a una variable en el módulo. Si es así, ¿cuál es la diferencia entre una clase y un módulo?
PD: soy un chico java. En caso de que si ayuda en la forma de explicar. Gracias.
Hay grandes diferencias entre las clases y los módulos en Python.
Las clases son planos que le permiten crear instancias con atributos y funcionalidad enlazada. Las clases admiten herencia, metaclases y descriptores.
Los módulos no pueden hacer nada de esto, los módulos son esencialmente instancias singleton de una clase de module
interno, y todas sus variables globales son atributos en la instancia del module
. Puede manipular esos atributos según sea necesario (agregar, eliminar y actualizar), pero tenga en cuenta que estos 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.
Así que como una guía general de estadio de béisbol:
- Utilice las clases como planos para los objetos que modelan el dominio de su problema.
- Usa módulos para recolectar funcionalidad 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 las clases son tanto del estado global, cargadas 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 .
Por lo tanto, 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 las import
. Por ejemplo, el módulo math
en python contiene solo un montón de funciones, y usted simplemente llama a aquellas que son necesarias ( math.sin
). Basta con echar un vistazo a esta question .
Por otro lado, una clase de python es algo similar a una clase de java, solo está estructurada de una manera ligeramente diferente.