Lo que estoy tratando de hacer se vería así en la línea de comando:
>>> import mymodule
>>> names = dir(mymodule)
¿Cómo puedo obtener una referencia a todos los nombres definidos mymodule
desde dentro?mymodule
?
Algo como esto:
# mymodule.py
names = dir(__thismodule__)
Respuestas:
Solo usa globals ()
http://docs.python.org/library/functions.html#globals
fuente
Como se mencionó anteriormente, globals le brinda un diccionario en lugar de dir () que le brinda una lista de los nombres definidos en el módulo. La forma en que normalmente veo que esto se hace es así:
fuente
sys.modules[__name__].__doc__
.operators.attrgetter('module.attribute')(sys.modules[__name__])
- ya sabes, si haces cosas locas, la gente te dice que no las hagas, como importar dinámicamente paquetes desde cadenas y luego parchearlos sin estar dentro de una clase ni nada ...sys.modules[__name__].__doc__
==__doc__
ya que esto está definido en el espacio de nombres actual. Por lo tanto, no es necesario obtener el objeto del módulo para acceder a sus propios atributos.Puede que sea tarde para responder, pero no encontré la respuesta correcta para mí. La solución más cercana y precisa (más rápida que
inspect.stack()
) en Python3.7.x
:Pros :
globals()
método.pytest
:Contras:
pytest.exe
que podría no ser lo que quieres.inspect.getmodule
aún puede devolver None en módulos válidos dependiendo del enlaceTengo una extensión para Python: ¿Cómo importar un módulo dada la ruta completa?
La extensión que tiene funciones de envoltura para ese caso:
Solo tienes que inicializar la extensión correctamente:
fuente