Yo, por mi parte, estoy agradecido por esta pregunta, porque la respuesta es concisa y proporciona el conocimiento exacto necesario. La documentación está muy bien, pero es detallada y contiene mucha más información de la que pedía el OP, y ciertamente más de lo que necesitaba. Solo quería una respuesta a esa pregunta específica, y la respuesta a continuación es exactamente lo que quería. Muchos de nosotros simplemente no necesitamos respuestas tan formales o profundas.
Ajá, así que cuando dices que el nombre del archivo se trata como un espacio de nombres, ¿harías algo así? "mymodule.var1" para el primer caso, o "myclass.var1" para el segundo?
Dark Templar
1
No exactamente. El paquete todavía cuenta como parte del espacio de nombres. Si desea hacer lo que dijo, debe hacerlo desde mypackage import mymodule.
Yam Marcovic
Puede ser útil agregar algo sobre los paquetes de espacios de nombres, para los cuales el código no necesariamente debe aparecer en el mismo árbol de directorios.
holdenweb
@holdenweb Nunca usé los diferentes mecanismos involucrados allí directamente, por lo que no es un experto. Si proporciona una explicación detallada al respecto en una nueva respuesta, me referiré a la mía.
Yam Marcovic
Probablemente sea un poco esotérico para valer la pena, en retrospectiva
Respuestas:
Un módulo de Python es simplemente un archivo fuente de Python, que puede exponer clases, funciones y variables globales.
Cuando se importa desde otro archivo fuente de Python, el nombre del archivo se trata como un espacio de nombres.
Un paquete de Python es simplemente un directorio de módulos Python.
Por ejemplo, imagine el siguiente árbol de directorios en
/usr/lib/python/site-packages
:Entonces harías:
o
fuente